Как правильный способ прочитать все заголовки GRPC и трейлеры в Java, включая «: статус»?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как правильный способ прочитать все заголовки GRPC и трейлеры в Java, включая «: статус»?

Сообщение Anonymous »

Я пытаюсь реализовать перехватчик для регистрации на серверах и клиентах GRPC. Я попытался использовать следующий код для прочтения всех клавишных значений из метаданных и преобразовать их в строковое представление, чтобы распечатать их на экран:
private String metadataToString(final Metadata metadata) {
if (metadata == null) {
return "";
}

var sb = new StringBuilder();

for (String key : metadata.keys())
{
var metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER);

sb.append(
String.format(
"%s: %s\n",
key,
metadata.get(metadataKey)));
}

return sb.toString();
}
< /code>
Я проверил его в клиентском перехватчике, чтобы войти в систему заголовков и трейлеров. Это работает нормально, если запрос GRPC успешно. И в этом случае приведенный выше код не выполняет следующее исключение: < /p>
java.lang.IllegalArgumentException: Invalid character ':' in key name ':status'
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:273)
at io.grpc.Metadata$Key.validateName(Metadata.java:754)
at io.grpc.Metadata$Key.(Metadata.java:762)
at io.grpc.Metadata$Key.(Metadata.java:671)
at io.grpc.Metadata$AsciiKey.(Metadata.java:971)
at io.grpc.Metadata$AsciiKey.(Metadata.java:966)
at io.grpc.Metadata$Key.of(Metadata.java:708)
at io.grpc.Metadata$Key.of(Metadata.java:704)
at com.travix.supplier.ancillary.service.bundles.interceptors.logging.client.GrpcLoggingClientCallListener.metadataToString(GrpcLoggingClientCallListener.java:81)
< /code>
Какова причина этого, я делаю что -то не так? Кажется удивительным, что структура будет включать ключ с незаконным значением, поэтому я подозреваю, что я реализовал его неправильно. Grpc/grpc-java/blob/572f4332a75367e0d0e1cb096198839b68787670/core/src/main/java/io/grpc/internal/http2clestream.java#l66. Я попытался скопировать эту http_status_line_marshaller < /code> в мою библиотеку и создать ключ с этим, но я все еще получил такое же исключение. правильный способ реализовать это, это было бы оценено!


Подробнее здесь: https://stackoverflow.com/questions/794 ... -including
Ответить

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

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

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

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

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