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

dmvolod pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit fe9f41f4848c9931bc55a611e0265617530fd968
Author: Dmitry Volodin <dmvo...@gmail.com>
AuthorDate: Tue Apr 14 19:18:55 2020 +0300

    CAMEL-14893: Handling onError
    Thanks, son, kyoungduk for implementation
---
 .../component/grpc/server/GrpcMethodHandler.java   | 24 ++++++++++++++++------
 1 file changed, 18 insertions(+), 6 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 14c2eda..6364e65 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,14 +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(responseObserver::onNext);
+            
+            if (exchange.isFailed()) {
+                responseObserver.onError(Status.INTERNAL
+                        .withDescription(exchange.getException().getMessage())
+                        // This can be attached to the Status locally, but NOT 
transmitted to the client!
+                        .withCause(exchange.getException())
+                        .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