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 <[email protected]>
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];