Я создаю серверное приложение на основе 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
Ошибка заглушки Java Proto gRPC при анализе типа карты ⇐ JAVA
Программисты JAVA общаются здесь
-
Anonymous
1727413033
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
}
Подробнее здесь: [url]https://stackoverflow.com/questions/76576516/proto-grpc-java-stub-fail-while-parsing-map-type[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия