Java 我能';t解析通过RabbitMQ发送的协议缓冲区
我正在构建一个web服务,它从RabbitMQ发送和接收消息,它可以发送消息,而另一方可以读取并进行解析。但是web服务无法解析响应。我在Web服务中使用Poto3.3.3和java播放框架,消耗消息的服务将用C++编写,但是我有两个同样的错误(java和python),它们都是相同的错误,我不知道该怎么办。 信息如下:Java 我能';t解析通过RabbitMQ发送的协议缓冲区,java,playframework,rabbitmq,protocol-buffers,Java,Playframework,Rabbitmq,Protocol Buffers,我正在构建一个web服务,它从RabbitMQ发送和接收消息,它可以发送消息,而另一方可以读取并进行解析。但是web服务无法解析响应。我在Web服务中使用Poto3.3.3和java播放框架,消耗消息的服务将用C++编写,但是我有两个同样的错误(java和python),它们都是相同的错误,我不知道该怎么办。 信息如下: syntax = "proto3"; option optimize_for = LITE_RUNTIME; import "Subject.proto"; messag
syntax = "proto3";
option optimize_for = LITE_RUNTIME;
import "Subject.proto";
message FacialVerificationRequest{
string event_id = 1;
Subject subject = 2;
}
message MatcherResult {
string id_subject = 1;
float matcher_score = 2;
}
message FacialVerificationResponse{
enum ResponseType {
SUCCESS = 0;
ERROR = 1;
NOT_FOUND = 2;
}
string message = 1;
ResponseType type = 2;
MatcherResult matcher_result = 3;
}
代码如下:
try{
strResponse = rpcClient.call(facialRequest.toByteArray());
System.out.println(strResponse);
String value = new String(strResponse.getBytes(), StandardCharsets.UTF_8);
Verification.FacialVerificationResponse response = Verification.FacialVerificationResponse.parseFrom(
strResponse.getBytes());
System.out.println(response);
}
catch (Exception e){
e.printStackTrace();
}
以及StackTrace:
com.google.protobuf.InvalidProtocolBufferException$InvalidWireTypeException: Protocol message tag had invalid wire type.
at com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:111)
at com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:557)
at com.google.protobuf.GeneratedMessageV3.parseUnknownField(GeneratedMessageV3.java:320)
at model.Verification$FacialVerificationResponse.<init>(Verification.java:1543)
at model.Verification$FacialVerificationResponse.<init>(Verification.java:1473)
at model.Verification$FacialVerificationResponse$1.parsePartialFrom(Verification.java:2403)
at model.Verification$FacialVerificationResponse$1.parsePartialFrom(Verification.java:2397)
at com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:158)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
at model.Verification$FacialVerificationResponse.parseFrom(Verification.java:1888)
at controllers.VerificationController.index(VerificationController.java:36)
[...]
com.google.protobuf.InvalidProtocolBufferException$InvalidWireTypeException:协议消息标记的导线类型无效。
位于com.google.protobuf.InvalidProtocolBufferException.invalidWireType(InvalidProtocolBufferException.java:111)
位于com.google.protobuf.UnknownFieldSet$Builder.mergeFieldFrom(UnknownFieldSet.java:557)
位于com.google.protobuf.GeneratedMessageV3.parseUnknownField(GeneratedMessageV3.java:320)
在model.Verification$FacicalVerificationResponse.(Verification.java:1543)
在model.Verification$FacicalVerificationResponse(Verification.java:1473)
在model.Verification$facicalverificationresponse$1.parsePartialFrom(Verification.java:2403)
在model.Verification$FacicalVerificationResponse$1.parsePartialFrom(Verification.java:2397)
位于com.google.protobuf.AbstractParser.parsePartialFrom(AbstractParser.java:158)
位于com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:191)
位于com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:203)
位于com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:208)
位于com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
在model.Verification$FacicalVerificationResponse.parseFrom(Verification.java:1888)
at controllers.VerificationController.index(VerificationController.java:36)
[...]
我发送的是字符串的字节,而我应该发送FacicalVerificationResponse的字节,所以这就是错误。您能检查响应返回的格式吗?也许它不是“wire format”,而是textproto。@cs95我发送的是VerificationFacialResponse,但我是以字符串形式发送的。我应该将其作为VerificationFacialResponse.getBytes()发送