【发布时间】:2019-05-02 14:24:01
【问题描述】:
我有一个问题/问题。
我正在使用 RabbitMq 从 C++ 向 Java(Play 框架)发送消息。因此,在 C++ 方面,我使用了 SerializeToString 函数(也尝试了 SerializeToArray 和 char* )。 ParseFrom 在使用 String 或 byte [] 的 Java 中不起作用。
详细信息:在我的消息中,我发送 base64 图像,超过 500k 个字符为String。错误是:
CodedInputStream encountered an embedded string or message which claimed to have negative size
没有 base64 字符串和其他属性的消息,ParseFrom 工作正常。
这里是完整的错误:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[InvalidProtocolBufferException: CodedInputStream encountered an embedded string or message which claimed to have negative size.]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:323)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:243)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:382)
at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:380)
at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:417)
at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:41)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
Caused by: com.google.protobuf.InvalidProtocolBufferException: CodedInputStream encountered an embedded string or message which claimed to have negative size.
at com.google.protobuf.InvalidProtocolBufferException.negativeSize(InvalidProtocolBufferException.java:92)
at com.google.protobuf.CodedInputStream$ArrayDecoder.pushLimit(CodedInputStream.java:1179)
at com.google.protobuf.CodedInputStream$ArrayDecoder.readMessage(CodedInputStream.java:881)
at model.RequestOrResponse$Response.dynamicMethod(RequestOrResponse.java:1542)
at com.google.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1597)
at com.google.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1630)
at com.google.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1746)
at model.RequestOrResponse$Response.parseFrom(RequestOrResponse.java:1232)
at controllers.SubjectController.get(SubjectController.java:195)
at router.Routes$$anonfun$routes$1.$anonfun$applyOrElse$14(Routes.scala:187)
【问题讨论】:
-
请阅读minimal reproducible example 并相应地增强您的问题。很可能,您的代码中存在错误。很难说我们什么时候看不到该代码的相关部分。
标签: java c++ rabbitmq base64 protocol-buffers