diff --git a/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyResponseWriter.java b/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyResponseWriter.java index 19de6c171f..b145caaa04 100644 --- a/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyResponseWriter.java +++ b/containers/netty-http/src/main/java/org/glassfish/jersey/netty/httpserver/NettyResponseWriter.java @@ -200,8 +200,27 @@ public void commit() { @Override public void failure(Throwable error) { - ctx.writeAndFlush(new DefaultFullHttpResponse(req.protocolVersion(), HttpResponseStatus.INTERNAL_SERVER_ERROR)) - .addListener(ChannelFutureListener.CLOSE); + try { + ctx.writeAndFlush(new DefaultFullHttpResponse(req.protocolVersion(), HttpResponseStatus.INTERNAL_SERVER_ERROR)) + .addListener(ChannelFutureListener.CLOSE); + } catch (Throwable t) { + error.addSuppressed(t); + } finally { + rethrow(error); + } + } + + /** + * Rethrow the original exception as required by JAX-RS, 3.3.4 + * + * @param error throwable to be re-thrown + */ + private void rethrow(Throwable error) { + if (error instanceof RuntimeException) { + throw (RuntimeException) error; + } else { + throw new ContainerException(error); + } } @Override