This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-2.25.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-2.25.x by this push:
     new 83eaede  I reported to jira about error handling in grpc component and 
it was fixed. (#3742)
83eaede is described below

commit 83eaedeba535f263a1753dac91ae6a34b1cdd220
Author: kyoungduk <kyoung...@gmail.com>
AuthorDate: Wed Apr 15 13:55:12 2020 +0900

    I reported to jira about error handling in grpc component and it was fixed. 
(#3742)
    
    https://issues.apache.org/jira/browse/CAMEL-14893
    
    I am also using camel 2.25.x version in my project.
    So I modified the source code in the 2.25.x branch for this issue.
---
 .../component/grpc/server/GrpcMethodHandler.java   | 26 +++++++++++++++-------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
index 118c234..ebcaeef 100644
--- 
a/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
+++ 
b/components/camel-grpc/src/main/java/org/apache/camel/component/grpc/server/GrpcMethodHandler.java
@@ -21,6 +21,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import io.grpc.Status;
 import io.grpc.stub.StreamObserver;
 import javassist.util.proxy.MethodHandler;
 import org.apache.camel.Exchange;
@@ -64,16 +65,25 @@ public class GrpcMethodHandler implements MethodHandler {
             }
             
             StreamObserver<Object> responseObserver = 
(StreamObserver<Object>)args[1];
-            Object responseBody = exchange.getIn().getBody();
-            if (responseBody instanceof List) {
-                List<Object> responseList = (List<Object>)responseBody;
-                responseList.forEach((responseItem) -> {
-                    responseObserver.onNext(responseItem);
-                });
+
+            if (exchange.isFailed()) {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription(exchange.getException().getMessage())
+                        .withCause(exchange.getException()) // This can be 
attached to the Status locally, but NOT transmitted to the client!
+                        .asRuntimeException());
             } else {
-                responseObserver.onNext(responseBody);
+                Object responseBody = exchange.getIn().getBody();
+                if (responseBody instanceof List) {
+                    List<Object> responseList = (List<Object>) responseBody;
+                    responseList.forEach((responseItem) -> {
+                        responseObserver.onNext(responseItem);
+                    });
+                } else {
+                    responseObserver.onNext(responseBody);
+                }
+                responseObserver.onCompleted();
             }
-            responseObserver.onCompleted();
+
         } else if (args.length == 1 && args[0] instanceof StreamObserver) {
             // Single incoming parameter is instance of the 
io.grpc.stub.StreamObserver
             final StreamObserver<Object> responseObserver = 
(StreamObserver<Object>)args[0];

Reply via email to