org.jboss.netty.handler.codec.http
Class HttpContentDecoder

java.lang.Object
  extended by org.jboss.netty.channel.SimpleChannelUpstreamHandler
      extended by org.jboss.netty.handler.codec.http.HttpContentDecoder
All Implemented Interfaces:
ChannelHandler, ChannelUpstreamHandler
Direct Known Subclasses:
HttpContentDecompressor

public abstract class HttpContentDecoder
extends SimpleChannelUpstreamHandler

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 ChannelBuffers into HTTP requests.

Version:
$Rev: 2368 $, $Date: 2010-10-18 17:19:03 +0900 (Mon, 18 Oct 2010) $
Author:
The Netty Project, Trustin Lee

Nested Class Summary
 
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
ChannelHandler.Sharable
 
Constructor Summary
protected HttpContentDecoder()
          Creates a new instance.
 
Method Summary
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, channelClosed, 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

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


Copyright © 2008-2011 JBoss, a division of Red Hat, Inc.. All Rights Reserved.