Tools/grpc

[gRPC] Exception in thread “grpc-default-executor-0” java.lang.NoSuchMethodError: ‘boolean com.google.protobuf.GeneratedMessageV3.isStringEmpty(java.lang.Object)’ 에러 해결

MOMOBOB 2024. 5. 8. 06:36
반응형

 

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!

 

 

반응형