diff --git a/servlet/src/main/java/io/grpc/servlet/ServletServerStream.java b/servlet/src/main/java/io/grpc/servlet/ServletServerStream.java index 0182f302698..63415f87472 100644 --- a/servlet/src/main/java/io/grpc/servlet/ServletServerStream.java +++ b/servlet/src/main/java/io/grpc/servlet/ServletServerStream.java @@ -82,6 +82,8 @@ final class ServletServerStream extends AbstractServerStream { this.resp = (HttpServletResponse) asyncCtx.getResponse(); this.writer = new AsyncServletOutputStreamWriter( asyncCtx, transportState, logId); + // Register before the peer can reset the stream and cause the container to commit the response. + resp.setTrailerFields(sink.trailerSupplier); resp.getOutputStream().setWriteListener(new GrpcWriteListener()); } @@ -231,7 +233,6 @@ private final class Sink implements AbstractServerStream.Sink { @Override public void writeHeaders(Metadata headers, boolean flush) { writeHeadersToServletResponse(headers); - resp.setTrailerFields(trailerSupplier); try { writer.flush(); } catch (IOException e) {