|
42 | 42 | import java.util.Collections; |
43 | 43 | import java.util.HashMap; |
44 | 44 | import java.util.Map; |
| 45 | +import java.util.function.BiConsumer; |
45 | 46 | import java.util.function.Supplier; |
46 | 47 | import java.util.logging.Logger; |
47 | 48 | import javax.annotation.Nullable; |
@@ -122,9 +123,13 @@ private void writeHeadersToServletResponse(Metadata metadata) { |
122 | 123 | resp.setStatus(HttpServletResponse.SC_OK); |
123 | 124 | resp.setContentType(CONTENT_TYPE_GRPC); |
124 | 125 |
|
| 126 | + serializeHeaders(metadata, resp::addHeader); |
| 127 | + } |
| 128 | + |
| 129 | + private static void serializeHeaders(Metadata metadata, BiConsumer<String, String> consumer) { |
125 | 130 | byte[][] serializedHeaders = TransportFrameUtil.toHttp2Headers(metadata); |
126 | 131 | for (int i = 0; i < serializedHeaders.length; i += 2) { |
127 | | - resp.addHeader( |
| 132 | + consumer.accept( |
128 | 133 | new String(serializedHeaders[i], StandardCharsets.US_ASCII), |
129 | 134 | new String(serializedHeaders[i + 1], StandardCharsets.US_ASCII)); |
130 | 135 | } |
@@ -277,13 +282,8 @@ public void writeTrailers(Metadata trailers, boolean headersSent, Status status) |
277 | 282 | if (!headersSent) { |
278 | 283 | writeHeadersToServletResponse(trailers); |
279 | 284 | } else { |
280 | | - byte[][] serializedHeaders = TransportFrameUtil.toHttp2Headers(trailers); |
281 | | - for (int i = 0; i < serializedHeaders.length; i += 2) { |
282 | | - String key = new String(serializedHeaders[i], StandardCharsets.US_ASCII); |
283 | | - String newValue = new String(serializedHeaders[i + 1], StandardCharsets.US_ASCII); |
284 | | - trailerSupplier.get().computeIfPresent(key, (k, v) -> v + "," + newValue); |
285 | | - trailerSupplier.get().putIfAbsent(key, newValue); |
286 | | - } |
| 285 | + serializeHeaders(trailers, |
| 286 | + (k, v) -> trailerSupplier.get().merge(k, v, (oldV, newV) -> oldV + "," + newV)); |
287 | 287 | } |
288 | 288 |
|
289 | 289 | writer.complete(); |
|
0 commit comments