Ошибка заглушки Java Proto gRPC при анализе типа картыJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка заглушки Java Proto gRPC при анализе типа карты

Сообщение Anonymous »

Я создаю серверное приложение на основе protobuf с интерфейсом gRPC.
Серверная часть — golang
Клиентская часть — Java
Прото-файл имеет объект (карта как тип):
message SomeResponse {
map entity_by_id = 1;
}

message Entity {
uint32 id = 1;
string name = 2;
}

На основе этого файла сгенерирована заглушка Java gRPC для отправки запроса на сервер.
Как только я делаю запрос на сервер, клиент выдает ошибку:
CANCELLED: Failed to read message.
Код клиента:
EntityRequest request = EntityRequest.newBuilder().addExtIds("abc").build();
EntityResponse response;
EntityServiceGrpc.EntityServiceBlockingStub client = EntityServiceGrpc.newBlockingStub(
ManagedChannelFactory.get(
InfrastructureProperties.GRPC_HOST,
InfrastructureProperties.GRPC_PORT
)
);
try {
response = client.getEntityByExtIds(request);
}
catch (StatusRuntimeException e) {
// failing here with CANCELLED: Failed to read message.
}

Серверная часть работает на 100% - подтвердил это с клиентом goLang gRPC и еще...
Запрос от клиента (java-заглушка) обращается к серверу, и сервер возвращает ответ, Java-заглушка не может его разобрать...
Если я меняю тип объекта - работает нормально. Проблема с картой.
Можете ли вы указать направление, в котором может быть проблема?
Версия протокола Golang: v4.22.2
Java версия протокола для создания заглушки: 3.23.3
Версия Java-клиента io.grpc: 1.56.0
Я подтвердил конкретную проблему с анализом значения карты в ответе Java-заглушки
Трассировка стека (я попытался удалить ненужные строки):
Status{code=CANCELLED, description=Failed to read message., cause=java.lang.NoClassDefFoundError: Could not initialize class com.sixt.service.bbb_bbb_extension.api.GuestOuterClass
at com.sixt.service.bbb_extension.api.GuestByExtIdsResponse$GuestByExtIdDefaultEntryHolder.(GuestByExtIdsResponse.java:56)
at com.sixt.service.bbb_extension.api.GuestByExtIdsResponse$Builder.mergeFrom(GuestByExtIdsResponse.java:471)
at com.sixt.service.bbb_extension.api.GuestByExtIdsResponse$1.parsePartialFrom(GuestByExtIdsResponse.java:656)
at com.sixt.service.bbb_extension.api.GuestByExtIdsResponse$1.parsePartialFrom(GuestByExtIdsResponse.java:648)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:86)
at com.google.protobuf.AbstractParser.parseFrom(AbstractParser.java:48)
at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parseFrom(ProtoLiteUtils.java:242)
at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:234)
at io.grpc.protobuf.lite.ProtoLiteUtils$MessageMarshaller.parse(ProtoLiteUtils.java:131)
at io.grpc.MethodDescriptor.parseResponse(MethodDescriptor.java:284)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInternal(ClientCallImpl.java:660)
at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1MessagesAvailable.runInContext(ClientCallImpl.java:647)
at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)
at io.grpc.stub.ClientCalls$ThreadlessExecutor.runQuietly(ClientCalls.java:777)
at io.grpc.stub.ClientCalls$ThreadlessExecutor.waitAndDrain(ClientCalls.java:760)
at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:161)
at com.sixt.service.ride_user_extension.api.GuestServiceGrpc$GuestServiceBlockingStub.getGuestByExtIds(GuestServiceGrpc.java:397)
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.NoSuchMethodError: 'boolean com.google.protobuf.DescriptorProtos$FieldDescriptorProto.getProto3Optional()' [in thread "Test worker"]
at com.google.protobuf.Descriptors$FieldDescriptor.(Descriptors.java:1519)
at com.google.protobuf.Descriptors$FieldDescriptor.(Descriptors.java:1066)
at com.google.protobuf.Descriptors$Descriptor.(Descriptors.java:944)
at com.google.protobuf.Descriptors$Descriptor.(Descriptors.java:657)
at com.google.protobuf.Descriptors$FileDescriptor.(Descriptors.java:561)
at com.google.protobuf.Descriptors$FileDescriptor.buildFrom(Descriptors.java:333)
at com.google.protobuf.Descriptors$FileDescriptor.internalBuildGeneratedFileFrom(Descriptors.java:440)
at com.google.api.HttpProto.(HttpProto.java:57)
at com.google.api.AnnotationsProto.(AnnotationsProto.java:54)
at com.sixt.service.ride_user_extension.api.GuestOuterClass.(GuestOuterClass.java:183)
at com.sixt.service.ride_user_extension.api.GuestByExtIdsRequest.internalGetFieldAccessorTable(GuestByExtIdsRequest.java:38)
at com.google.protobuf.GeneratedMessageV3.getDescriptorForType(GeneratedMessageV3.java:139)
at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:363)
at com.google.protobuf.TextFormat$Printer.print(TextFormat.java:353)
at com.google.protobuf.TextFormat$Printer.printToString(TextFormat.java:615)
at com.google.protobuf.AbstractMessage.toString(AbstractMessage.java:110)
at net.thucydides.core.steps.StepArgumentWriter.readableFormOf(StepArgumentWriter.java:14)
at net.thucydides.core.steps.StepNamer.testNameWithArguments(StepNamer.java:42)
at net.thucydides.core.steps.StepNamer.nameFor(StepNamer.java:19)
at net.thucydides.core.steps.StepInterceptor.getTestNameFrom(StepInterceptor.java:534)
at net.thucydides.core.steps.StepInterceptor.notifyStepStarted(StepInterceptor.java:568)
at net.thucydides.core.steps.StepInterceptor.runOrSkipMethod(StepInterceptor.java:208)
... 49 more
}


Подробнее здесь: https://stackoverflow.com/questions/765 ... g-map-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»