public abstract class HttpContentDecoder extends MessageToMessageDecoder<HttpObject>
HttpRequest and HttpContent.
The original content is replaced with the new content decoded by the
EmbeddedChannel, which is created by newContentDecoder(String).
Once decoding is finished, the value of the 'Content-Encoding'
header is set to the target content encoding, as returned by getTargetContentEncoding(String).
Also, the 'Content-Length' header is updated to the length of the
decoded content. If the content encoding of the original is not supported
by the decoder, newContentDecoder(String) should return null
so that no decoding occurs (i.e. pass-through).
Please note that this is an abstract class. You have to extend this class
and implement newContentDecoder(String) properly to make this class
functional. For example, refer to the source code of HttpContentDecompressor.
This handler must be placed after HttpObjectDecoder in the pipeline
so that this handler can intercept HTTP requests after HttpObjectDecoder
converts ByteBufs into HTTP requests.
ChannelHandler.Sharable| Modifier and Type | Field and Description |
|---|---|
protected ChannelHandlerContext |
ctx |
| Constructor and Description |
|---|
HttpContentDecoder() |
| Modifier and Type | Method and Description |
|---|---|
void |
channelInactive(ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.fireChannelInactive() to forward
to the next ChannelInboundHandler in the ChannelPipeline. |
void |
channelReadComplete(ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.fireChannelReadComplete() to forward
to the next ChannelInboundHandler in the ChannelPipeline. |
protected void |
decode(ChannelHandlerContext ctx,
HttpObject msg,
List<Object> out)
Decode from one message to an other.
|
protected String |
getTargetContentEncoding(String contentEncoding)
Returns the expected content encoding of the decoded content.
|
void |
handlerAdded(ChannelHandlerContext ctx)
Do nothing by default, sub-classes may override this method.
|
void |
handlerRemoved(ChannelHandlerContext ctx)
Do nothing by default, sub-classes may override this method.
|
protected abstract EmbeddedChannel |
newContentDecoder(String contentEncoding)
Returns a new
EmbeddedChannel that decodes the HTTP message
content encoded in the specified contentEncoding. |
acceptInboundMessage, channelReadchannelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredensureNotSharable, isSharableprotected ChannelHandlerContext ctx
protected void decode(ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception
MessageToMessageDecoderdecode in class MessageToMessageDecoder<HttpObject>ctx - the ChannelHandlerContext which this MessageToMessageDecoder belongs tomsg - the message to decode to an other oneout - the List to which decoded messages should be addedException - is thrown if an error occurspublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireChannelReadComplete() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelReadComplete in interface ChannelInboundHandlerchannelReadComplete in class MessageToMessageDecoder<HttpObject>Exceptionprotected abstract EmbeddedChannel newContentDecoder(String contentEncoding) throws Exception
EmbeddedChannel that decodes the HTTP message
content encoded in the specified contentEncoding.contentEncoding - the value of the "Content-Encoding" headerEmbeddedChannel if the specified encoding is supported.
null otherwise (alternatively, you can throw an exception
to block unknown encoding).Exceptionprotected String getTargetContentEncoding(String contentEncoding) throws Exception
"identity" by default, which is the case for
most decoders.contentEncoding - the value of the "Content-Encoding" headerExceptionpublic void handlerRemoved(ChannelHandlerContext ctx) throws Exception
ChannelHandlerAdapterhandlerRemoved in interface ChannelHandlerhandlerRemoved in class ChannelHandlerAdapterExceptionpublic void channelInactive(ChannelHandlerContext ctx) throws Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireChannelInactive() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelInactive in interface ChannelInboundHandlerchannelInactive in class ChannelInboundHandlerAdapterExceptionpublic void handlerAdded(ChannelHandlerContext ctx) throws Exception
ChannelHandlerAdapterhandlerAdded in interface ChannelHandlerhandlerAdded in class ChannelHandlerAdapterExceptionCopyright © 2008–2025 The Netty Project. All rights reserved.