Class HttpContentDecoder

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
io.netty.handler.codec.http.HttpContentDecoder
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler
Direct Known Subclasses:
HttpContentDecompressor

public abstract class HttpContentDecoder extends io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
Decodes the content of the received 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.

  • Nested Class Summary

    Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler

    io.netty.channel.ChannelHandler.Sharable
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected io.netty.channel.ChannelHandlerContext
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    channelInactive(io.netty.channel.ChannelHandlerContext ctx)
     
    void
    channelReadComplete(io.netty.channel.ChannelHandlerContext ctx)
     
    protected void
    decode(io.netty.channel.ChannelHandlerContext ctx, HttpObject msg, List<Object> out)
     
    protected String
    Returns the expected content encoding of the decoded content.
    void
    handlerAdded(io.netty.channel.ChannelHandlerContext ctx)
     
    void
    handlerRemoved(io.netty.channel.ChannelHandlerContext ctx)
     
    protected abstract io.netty.channel.embedded.EmbeddedChannel
    newContentDecoder(String contentEncoding)
    Returns a new EmbeddedChannel that decodes the HTTP message content encoded in the specified contentEncoding.

    Methods inherited from class io.netty.handler.codec.MessageToMessageDecoder

    acceptInboundMessage, channelRead

    Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter

    channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered

    Methods inherited from class io.netty.channel.ChannelHandlerAdapter

    ensureNotSharable, isSharable

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • ctx

      protected io.netty.channel.ChannelHandlerContext ctx
  • Constructor Details

    • HttpContentDecoder

      public HttpContentDecoder()
  • Method Details

    • decode

      protected void decode(io.netty.channel.ChannelHandlerContext ctx, HttpObject msg, List<Object> out) throws Exception
      Specified by:
      decode in class io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
      Throws:
      Exception
    • channelReadComplete

      public void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelReadComplete in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelReadComplete in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • newContentDecoder

      protected abstract io.netty.channel.embedded.EmbeddedChannel newContentDecoder(String contentEncoding) throws Exception
      Returns a new EmbeddedChannel that decodes the HTTP message content encoded in the specified contentEncoding.
      Parameters:
      contentEncoding - the value of the "Content-Encoding" header
      Returns:
      a new EmbeddedChannel if the specified encoding is supported. null otherwise (alternatively, you can throw an exception to block unknown encoding).
      Throws:
      Exception
    • getTargetContentEncoding

      protected String getTargetContentEncoding(String contentEncoding) throws Exception
      Returns the expected content encoding of the decoded content. This getMethod returns "identity" by default, which is the case for most decoders.
      Parameters:
      contentEncoding - the value of the "Content-Encoding" header
      Returns:
      the expected content encoding of the new content
      Throws:
      Exception
    • handlerRemoved

      public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerRemoved in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerRemoved in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception
    • channelInactive

      public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      channelInactive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelInactive in class io.netty.channel.ChannelInboundHandlerAdapter
      Throws:
      Exception
    • handlerAdded

      public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerAdded in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerAdded in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception