我无法解析通过 RabbitMQ 发送的协议缓冲区
I can't parse protocol buffer sent through RabbitMQ
我正在构建一个从 RabbitMQ 发送和接收消息的 Web 服务,它可以发送消息,另一端可以读取并进行解析。但是 Web 服务无法解析响应。我在网络服务中使用 protoc 3.12.3 和 Java Play Framework,使用消息的服务将用 C++ 编写,但我有两个模拟(Java 和 Python) 做同样的事情并给出同样的错误,我不知道该怎么办。
消息如下:
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.parsePartialFrom(Verification.java:2403)
at model.Verification$FacialVerificationResponse.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)
[...]
我发送的是字符串的字节,而我应该发送的是 FacialVerificationResponse 的字节,所以这是错误。
我正在构建一个从 RabbitMQ 发送和接收消息的 Web 服务,它可以发送消息,另一端可以读取并进行解析。但是 Web 服务无法解析响应。我在网络服务中使用 protoc 3.12.3 和 Java Play Framework,使用消息的服务将用 C++ 编写,但我有两个模拟(Java 和 Python) 做同样的事情并给出同样的错误,我不知道该怎么办。
消息如下:
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.parsePartialFrom(Verification.java:2403)
at model.Verification$FacialVerificationResponse.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)
[...]
我发送的是字符串的字节,而我应该发送的是 FacialVerificationResponse 的字节,所以这是错误。