Class 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 ctx  
    • Method Summary

      All Methods Instance Methods Abstract Methods Concrete Methods 
      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 getTargetContentEncoding​(String contentEncoding)
      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
    • Field Detail

      • ctx

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

      • HttpContentDecoder

        public HttpContentDecoder()
    • Method Detail

      • 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