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];