반응형
Error
gRPC이용하여 통신시 클라이언트 측에서 다음과 같은 에러가 발생함.
Exception in thread "grpc-default-executor-0" java.lang.NoSuchMethodError: 'boolean com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)'
at com.hyundai.contents.cus.ContentsServerRequest.getSerializedSize(ContentsServerRequest.java:241)
at io.grpc.protobuf.lite.ProtoInputStream.available(ProtoInputStream.java:108)
at io.grpc.internal.MessageFramer.getKnownLength(MessageFramer.java:205)
at io.grpc.internal.MessageFramer.writePayload(MessageFramer.java:137)
at io.grpc.internal.AbstractStream.writeMessage(AbstractStream.java:65)
at io.grpc.internal.ForwardingClientStream.writeMessage(ForwardingClientStream.java:37)
at io.grpc.internal.DelayedStream$6.run(DelayedStream.java:282)
at io.grpc.internal.DelayedStream.drainPendingCalls(DelayedStream.java:181)
at io.grpc.internal.DelayedStream.access$100(DelayedStream.java:43)
at io.grpc.internal.DelayedStream$4.run(DelayedStream.java:147)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
반응형
Solution
자바에서 gRPC통신을 위해 사용되는 프로토콜 버퍼를 사용하기 위한 라이브러리로 protobuf-java를 사용하는데 protobuf jar파일 생성한 protobuf-java 버전과 클라이언트 측에서 사용하는 protobuf-java의 버전이 달라서 발생
boolean com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)
해당 메서드는 protobuf-java 3.17.3 이상부터 지원하지만 클아이언트 측에서 사용하는 SpringBoot 라이브러리인 net.devh:grpc-client-spring-boot-starter:2.12.0 에서는 protobuf-java 3.12.0을 사용하기 때문에 호환되지 않아서 발생한 것!
- net.devh:grpc-client-spring-boot-starter:2.13.0
- net.devh:grpc-client-spring-boot-starter:2.13.1
net.devh:grpc-client-spring-boot-starter:2.13.1 이상을 사용하면 해결됨!
그래도 3개의 취약점이 있으니 2.15.0를 사용하는게 좋아보임
- net.devh:grpc-client-spring-boot-starter:2.15.0
Thank you!
반응형