org.jboss.netty.handler.codec.http

## Class HttpContentDecoder

- java.lang.Object
- - org.jboss.netty.channel.SimpleChannelUpstreamHandler
  - - org.jboss.netty.handler.codec.http.HttpContentDecoder

- All Implemented Interfaces:
    ChannelHandler, ChannelUpstreamHandler, LifeCycleAwareChannelHandler
  Direct Known Subclasses:
    HttpContentDecompressor

      public abstract class HttpContentDecoder
      extends SimpleChannelUpstreamHandler
      implements LifeCycleAwareChannelHandler

  Decodes the content of the received `HttpRequest` and `HttpChunk`. The original content is replaced with the new content decoded by the `DecoderEmbedder`, 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 `HttpMessageDecoder` in the pipeline so that this handler can intercept HTTP requests after `HttpMessageDecoder` converts `ChannelBuffer`s into HTTP requests.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler

      `ChannelHandler.Sharable`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `HttpContentDecoder()` Creates a new instance.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterAdd(ChannelHandlerContext ctx)`
    `void` | `afterRemove(ChannelHandlerContext ctx)`
    `void` | `beforeAdd(ChannelHandlerContext ctx)`
    `void` | `beforeRemove(ChannelHandlerContext ctx)`
    `void` | `channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)` Invoked when a `Channel` was closed and all its related resources were released.
    `protected String` | `getTargetContentEncoding(String contentEncoding)` Returns the expected content encoding of the decoded content.
    `void` | `messageReceived(ChannelHandlerContext ctx, MessageEvent e)` Invoked when a message object (e.g: `ChannelBuffer`) was received from a remote peer.
    `protected abstract DecoderEmbedder<ChannelBuffer>` | `newContentDecoder(String contentEncoding)` Returns a new `DecoderEmbedder` that decodes the HTTP message content encoded in the specified `contentEncoding`.

    - ### Methods inherited from class org.jboss.netty.channel.SimpleChannelUpstreamHandler

      `channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstream, writeComplete`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### HttpContentDecoder

          protected HttpContentDecoder()

      Creates a new instance.

  - ### Method Detail

    - #### messageReceived

          public void messageReceived(ChannelHandlerContext ctx,
                             MessageEvent e)
                               throws Exception

      Description copied from class: `SimpleChannelUpstreamHandler`
      Invoked when a message object (e.g: `ChannelBuffer`) was received from a remote peer.
      Overrides:
        `messageReceived` in class `SimpleChannelUpstreamHandler`
      Throws:
        `Exception`

    - #### channelClosed

          public void channelClosed(ChannelHandlerContext ctx,
                           ChannelStateEvent e)
                             throws Exception

      Description copied from class: `SimpleChannelUpstreamHandler`
      Invoked when a `Channel` was closed and all its related resources were released.
      Overrides:
        `channelClosed` in class `SimpleChannelUpstreamHandler`
      Throws:
        `Exception`

    - #### newContentDecoder

          protected abstract DecoderEmbedder<ChannelBuffer> newContentDecoder(String contentEncoding)
                                                                       throws Exception

      Returns a new `DecoderEmbedder` that decodes the HTTP message content encoded in the specified `contentEncoding`.
      Parameters:
        `contentEncoding` - the value of the `"Content-Encoding"` header
      Returns:
        a new `DecoderEmbedder` 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 method 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`

    - #### beforeAdd

          public void beforeAdd(ChannelHandlerContext ctx)
                         throws Exception

      Specified by:
        `beforeAdd` in interface `LifeCycleAwareChannelHandler`
      Throws:
        `Exception`

    - #### afterAdd

          public void afterAdd(ChannelHandlerContext ctx)
                        throws Exception

      Specified by:
        `afterAdd` in interface `LifeCycleAwareChannelHandler`
      Throws:
        `Exception`

    - #### beforeRemove

          public void beforeRemove(ChannelHandlerContext ctx)
                            throws Exception

      Specified by:
        `beforeRemove` in interface `LifeCycleAwareChannelHandler`
      Throws:
        `Exception`

    - #### afterRemove

          public void afterRemove(ChannelHandlerContext ctx)
                           throws Exception

      Specified by:
        `afterRemove` in interface `LifeCycleAwareChannelHandler`
      Throws:
        `Exception`

Copyright © 2008-2012 The Netty Project. All Rights Reserved.