org.jboss.netty.handler.codec.http

## Class HttpContentEncoder

- java.lang.Object
- - org.jboss.netty.channel.SimpleChannelHandler
  - - org.jboss.netty.handler.codec.http.HttpContentEncoder

All Implemented Interfaces:
  ChannelDownstreamHandler, ChannelHandler, ChannelUpstreamHandler, LifeCycleAwareChannelHandler

Direct Known Subclasses:
  HttpContentCompressor

    public abstract class HttpContentEncoder
    extends SimpleChannelHandler
    implements LifeCycleAwareChannelHandler

Encodes the content of the outbound `HttpResponse` and `HttpChunk`. The original content is replaced with the new content encoded by the `EncoderEmbedder`, which is created by `newContentEncoder(HttpMessage, String)`. Once encoding 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 encoded content. If there is no supported encoding in the corresponding `HttpRequest`'s `"Accept-Encoding"` header, `newContentEncoder(HttpMessage, String)` should return `null` so that no encoding occurs (i.e. pass-through).

Please note that this is an abstract class. You have to extend this class and implement `newContentEncoder(HttpMessage, String)` and `getTargetContentEncoding(String)` properly to make this class functional. For example, refer to the source code of `HttpContentCompressor`.

This handler must be placed after `HttpMessageEncoder` in the pipeline so that this handler can intercept HTTP responses before `HttpMessageEncoder` converts them into `ChannelBuffer`s.

### Nested Class Summary

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

`ChannelHandler.Sharable`

### Constructor Summary

Constructors
`protected` `HttpContentEncoder()` Creates a new instance.

### Method Summary

Methods
`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 abstract String` `getTargetContentEncoding(String acceptEncoding)` Returns the expected content encoding of the encoded content.
`void` `messageReceived(ChannelHandlerContext ctx, MessageEvent e)` Invoked when a message object (e.g: `ChannelBuffer`) was received from a remote peer.
`protected abstract EncoderEmbedder<ChannelBuffer>` `newContentEncoder(HttpMessage msg, String acceptEncoding)` Returns a new `EncoderEmbedder` that encodes the HTTP message content.
`void` `writeRequested(ChannelHandlerContext ctx, MessageEvent e)` Invoked when `Channel.write(Object)` is called.

### Methods inherited from class org.jboss.netty.channel.SimpleChannelHandler

`bindRequested, channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelOpen, channelUnbound, childChannelClosed, childChannelOpen, closeRequested, connectRequested, disconnectRequested, exceptionCaught, handleDownstream, handleUpstream, setInterestOpsRequested, unbindRequested, writeComplete`

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

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

### Constructor Detail

#### HttpContentEncoder

    protected HttpContentEncoder()

Creates a new instance.

### Method Detail

#### messageReceived

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

Description copied from class: `SimpleChannelHandler`
Invoked when a message object (e.g: `ChannelBuffer`) was received from a remote peer.

Overrides:
  `messageReceived` in class `SimpleChannelHandler`
Throws:
  `Exception`

#### writeRequested

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

Description copied from class: `SimpleChannelHandler`
Invoked when `Channel.write(Object)` is called.

Overrides:
  `writeRequested` in class `SimpleChannelHandler`
Throws:
  `Exception`

#### channelClosed

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

Description copied from class: `SimpleChannelHandler`
Invoked when a `Channel` was closed and all its related resources were released.

Overrides:
  `channelClosed` in class `SimpleChannelHandler`
Throws:
  `Exception`

#### newContentEncoder

    protected abstract EncoderEmbedder<ChannelBuffer> newContentEncoder(HttpMessage msg,
                                                   String acceptEncoding)
                                                                 throws Exception

Returns a new `EncoderEmbedder` that encodes the HTTP message content.

Parameters:
  `acceptEncoding` - the value of the `"Accept-Encoding"` header
Returns:
  a new `EncoderEmbedder` if there is a supported encoding in `acceptEncoding`. `null` otherwise.
Throws:
  `Exception`

#### getTargetContentEncoding

    protected abstract String getTargetContentEncoding(String acceptEncoding)
                                                throws Exception

Returns the expected content encoding of the encoded content.

Parameters:
  `acceptEncoding` - the value of the `"Accept-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`