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.
This commit is contained in:
Jay 2014-06-28 00:27:21 -04:00 committed by Norman Maurer
parent c8b170e9eb
commit db3c592e6a
2 changed files with 8 additions and 3 deletions

View File

@ -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;
}

View File

@ -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();
}