使用grpc-wiremock处理输入流时触发异常求助
grpc-wiremock输入流RPC调用失败问题
我搭建了grpc-wiremock环境,输出流功能正常,但输入流类型的RPC方法调用始终失败。项目仓库已设为只读,无法提交Issue,想了解是否有人成功实现过grpc输入流与grpc-wiremock的配合使用。
环境配置
Proto文件
路径为 ${PWD}/proto_test/dev/test/streams.proto,内容如下:
syntax = "proto3"; package dev.test; import "google/protobuf/empty.proto"; service TestStreamService { rpc testInputStream(stream TestStreamValue) returns (google.protobuf.Empty); rpc testOutputStream(google.protobuf.Empty) returns (stream TestStreamValue); rpc testBidirStream(stream TestStreamValue) returns (stream TestStreamValue); } message TestStreamValue { int32 value = 1; }
Dockerfile配置
FROM adven27/grpc-wiremock COPY ./proto_test/dev/test /proto/dev/test RUN gradle compileJava --info --stacktrace
构建并运行容器命令
docker image build -t protogrpc-poc-wiremock -f docker/Dockerfile.grpc_wiremock . && docker container run -p 8888:8888 -p 50000:50000 protogrpc-poc-wiremock
输出流功能验证(正常)
Stub配置请求
curl -X POST http://localhost:8888/__admin/mappings -d '{ "request": { "method": "POST", "url": "/TestStreamService/testOutputStream" }, "response": { "fixedDelayMilliseconds": 1000, "headers": {"streamSize": "5" }, "jsonBody": { "value": "{{request.headers.streamCursor}}" } } }'
调用结果
grpcurl -plaintext localhost:50000 dev.test.TestStreamService.testOutputStream { "value": 1 } { "value": 2 } { "value": 3 } { "value": 4 } { "value": 5 }
输入流功能异常情况
Stub配置请求
curl -X POST http://localhost:8888/__admin/mappings -d '{ "request": { "method": "POST", "url": "/TestStreamService/testInputStream" }, "response": { "status": 200 } }'
调用结果
grpcurl -plaintext -d '{"value":2}{"value": 5}' localhost:50000 dev.test.TestStreamService.testInputStreamm ERROR: Code: Unknown Message:
grpc-wiremock端堆栈信息
2022-11-21 07:25:14.485 ERROR 198 --- [ault-executor-1] io.grpc.internal.SerializingExecutor : Exception while executing runnable io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall@17e05f9e java.lang.IllegalStateException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInternal(ServerImpl.java:619) ~[grpc-core-1.44.1.jar:1.44.1] at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInContext(ServerImpl.java:603) ~[grpc-core-1.44.1.jar:1.44.1] at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.44.1.jar:1.44.1] at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.44.1.jar:1.44.1] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na] at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na] Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at io.adven.grpc.wiremock.Translator$WireMockTranslator.redirect(Translator.java:33) ~[main/:na] at io.adven.grpc.wiremock.Translator$WireMockTranslator.redirectDevTestTestStreamService(Translator.java:59) ~[main/:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:634) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:624) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:72) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753) ~[spring-aop-5.3.14.jar:5.3.14] at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698) ~[spring-aop-5.3.14.jar:5.3.14] at io.adven.grpc.wiremock.Translator$DevTestTestStreamService$$EnhancerBySpringCGLIB$$32b9d9e2.testInputStream(<generated>) ~[main/:na] at dev.test.TestStreamServiceGrpc$MethodHandlers.invoke(TestStreamServiceGrpc.java:320) ~[main/:na] at io.grpc.stub.ServerCalls$StreamingServerCallHandler.startCall(ServerCalls.java:235) ~[grpc-stub-1.44.1.jar:1.44.1] at io.grpc.Contexts.interceptCall(Contexts.java:52) ~[grpc-api-1.44.1.jar:1.44.1] at io.adven.grpc.wiremock.HeaderPropagationInterceptor.interceptCall(HeaderPropagationInterceptor.java:27) ~[main/:na] at io.grpc.ServerInterceptors$InterceptCallHandler.startCall(ServerInterceptors.java:244) ~[grpc-api-1.44.1.jar:1.44.1] at io.adven.grpc.wiremock.ExceptionHandler.interceptCall(ExceptionHandler.java:22) ~[main/:na] at io.grpc.ServerInterceptors$InterceptCallHandler.startCall(ServerInterceptors.java:244) ~[grpc-api-1.44.1.jar:1.44.1] at io.grpc.internal.ServerImpl$ServerTransportListenerImpl.startWrappedCall(ServerImpl.java:703) ~[grpc-core-1.44.1.jar:1.44.1] at io.grpc.internal.ServerImpl$ServerTransportListenerImpl.access$2200(ServerImpl.java:406) ~[grpc-core-1.44.1.jar:1.44.1] at io.grpc.internal.ServerImpl$ServerTransportListenerImpl$1HandleServerCall.runInternal(ServerImpl.java:615) ~[grpc-core-1.44.1.jar:1.44.1] ... 6 common frames omitted
提问
该项目仓库已设为只读,无法提交Issue。请问是否有人成功实现过grpc输入流与grpc-wiremock的配合使用?
内容的提问来源于stack exchange,提问作者fmartinsons
相关产品推荐
相关产品推荐

