From 461d3c876f27c32eaa673f0d2073de0922ca4277 Mon Sep 17 00:00:00 2001 From: Jay Date: Sat, 28 Jun 2014 00:27:21 -0400 Subject: [PATCH] Maintain decoder result in HttpObjectAggregator Motivation: DecodeResult is dropped when aggregate HTTP messages. Modification: Make sure we not drop the DecodeResult while aggregate HTTP messages. Result: Correctly include the DecodeResult for later processing. --- .../io/netty/handler/codec/http/HttpObjectAggregator.java | 3 ++- .../handler/codec/http/HttpObjectAggregatorTest.java | 8 ++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java index 5a1166bb01..64153e24b3 100644 --- a/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java +++ b/codec-http/src/main/java/io/netty/handler/codec/http/HttpObjectAggregator.java @@ -123,7 +123,7 @@ public class HttpObjectAggregator HttpRequest req = (HttpRequest) start; ret = new DefaultFullHttpRequest(req.protocolVersion(), req.method(), req.uri(), content); - } else if (start instanceof HttpResponse) { + } else if (start instanceof HttpResponse) { HttpResponse res = (HttpResponse) start; ret = new DefaultFullHttpResponse( res.protocolVersion(), res.status(), content); @@ -132,6 +132,7 @@ public class HttpObjectAggregator } ret.headers().set(start.headers()); + ret.setDecoderResult(start.decoderResult()); return ret; } diff --git a/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java b/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java index 6de6f08899..5afc5e5413 100644 --- a/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java +++ b/codec-http/src/test/java/io/netty/handler/codec/http/HttpObjectAggregatorTest.java @@ -306,7 +306,9 @@ public class HttpObjectAggregatorTest { public void testBadRequest() { EmbeddedChannel ch = new EmbeddedChannel(new HttpRequestDecoder(), new HttpObjectAggregator(1024 * 1024)); ch.writeInbound(Unpooled.copiedBuffer("GET / HTTP/1.0 with extra\r\n", CharsetUtil.UTF_8)); - assertThat(ch.readInbound(), is(instanceOf(FullHttpRequest.class))); + Object inbound = ch.readInbound(); + assertThat(inbound, is(instanceOf(FullHttpRequest.class))); + assertTrue(((FullHttpRequest) inbound).getDecoderResult().isFailure()); assertNull(ch.readInbound()); ch.finish(); } @@ -315,7 +317,9 @@ public class HttpObjectAggregatorTest { public void testBadResponse() throws Exception { EmbeddedChannel ch = new EmbeddedChannel(new HttpResponseDecoder(), new HttpObjectAggregator(1024 * 1024)); ch.writeInbound(Unpooled.copiedBuffer("HTTP/1.0 BAD_CODE Bad Server\r\n", CharsetUtil.UTF_8)); - assertThat(ch.readInbound(), is(instanceOf(FullHttpResponse.class))); + Object inbound = ch.readInbound(); + assertThat(inbound, is(instanceOf(FullHttpResponse.class))); + assertTrue(((FullHttpResponse) inbound).getDecoderResult().isFailure()); assertNull(ch.readInbound()); ch.finish(); }