Skip to content

Commit 9727739

Browse files
committed
servlet: extract ServletServerStream.serializeHeaders()
1 parent 2039266 commit 9727739

File tree

1 file changed

+12
-8
lines changed

1 file changed

+12
-8
lines changed

servlet/src/main/java/io/grpc/servlet/ServletServerStream.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import java.util.Map;
4646
import java.util.concurrent.CountDownLatch;
4747
import java.util.concurrent.TimeUnit;
48+
import java.util.function.BiConsumer;
4849
import java.util.function.Supplier;
4950
import java.util.logging.Logger;
5051
import javax.annotation.Nullable;
@@ -123,9 +124,13 @@ private void writeHeadersToServletResponse(Metadata metadata) {
123124
resp.setStatus(HttpServletResponse.SC_OK);
124125
resp.setContentType(CONTENT_TYPE_GRPC);
125126

127+
serializeHeaders(metadata, resp::addHeader);
128+
}
129+
130+
private static void serializeHeaders(Metadata metadata, BiConsumer<String, String> consumer) {
126131
byte[][] serializedHeaders = TransportFrameUtil.toHttp2Headers(metadata);
127132
for (int i = 0; i < serializedHeaders.length; i += 2) {
128-
resp.addHeader(
133+
consumer.accept(
129134
new String(serializedHeaders[i], StandardCharsets.US_ASCII),
130135
new String(serializedHeaders[i + 1], StandardCharsets.US_ASCII));
131136
}
@@ -278,13 +283,8 @@ public void writeTrailers(Metadata trailers, boolean headersSent, Status status)
278283
if (!headersSent) {
279284
writeHeadersToServletResponse(trailers);
280285
} else {
281-
byte[][] serializedHeaders = TransportFrameUtil.toHttp2Headers(trailers);
282-
for (int i = 0; i < serializedHeaders.length; i += 2) {
283-
String key = new String(serializedHeaders[i], StandardCharsets.US_ASCII);
284-
String newValue = new String(serializedHeaders[i + 1], StandardCharsets.US_ASCII);
285-
trailerSupplier.get().computeIfPresent(key, (k, v) -> v + "," + newValue);
286-
trailerSupplier.get().putIfAbsent(key, newValue);
287-
}
286+
serializeHeaders(trailers, (key, value) ->
287+
trailerSupplier.get().merge(key, value, TrailerSupplier::joinValues));
288288
}
289289

290290
writer.complete();
@@ -322,6 +322,10 @@ private static final class TrailerSupplier implements Supplier<Map<String, Strin
322322
public Map<String, String> get() {
323323
return trailers;
324324
}
325+
326+
static String joinValues(String oldValue, String newValue) {
327+
return oldValue + "," + newValue;
328+
}
325329
}
326330

327331
static String toHexString(byte[] bytes, int length) {

0 commit comments

Comments
 (0)