org.deegree.services.controller.utils
Class HttpResponseBuffer

java.lang.Object
  extended by javax.servlet.ServletResponseWrapper
      extended by javax.servlet.http.HttpServletResponseWrapper
          extended by org.deegree.services.controller.utils.HttpResponseBuffer
All Implemented Interfaces:
javax.servlet.http.HttpServletResponse, javax.servlet.ServletResponse

public class HttpResponseBuffer
extends javax.servlet.http.HttpServletResponseWrapper

Custom HttpServletResponseWrapper that buffers all written data internally and will only send the result when flushBuffer() is called.

This allows for two things:

With the first the service is able to set the Content-length. The second allows to discard the generated response and start the response from scratch. This is useful if an exception occurred and an ExceptionReport should be returned and not the partial original result.

This wrapper allows the change between getWriter() and getOutputStream() after reset() was called. This is unlike the original servlet API that throws an IllegalStateException when getWriter is called after getOutputStream, or vice versa.

Version:
$Revision: 27560 $, $Date: 2010-10-27 17:08:02 +0200 (Mi, 27. Okt 2010) $
Author:
Rutger Bezema, Oliver Tonnhofer, Markus Schneider, last edited by: $Author: lbuesching $

Field Summary
 
Fields inherited from interface javax.servlet.http.HttpServletResponse
SC_ACCEPTED, SC_BAD_GATEWAY, SC_BAD_REQUEST, SC_CONFLICT, SC_CONTINUE, SC_CREATED, SC_EXPECTATION_FAILED, SC_FORBIDDEN, SC_FOUND, SC_GATEWAY_TIMEOUT, SC_GONE, SC_HTTP_VERSION_NOT_SUPPORTED, SC_INTERNAL_SERVER_ERROR, SC_LENGTH_REQUIRED, SC_METHOD_NOT_ALLOWED, SC_MOVED_PERMANENTLY, SC_MOVED_TEMPORARILY, SC_MULTIPLE_CHOICES, SC_NO_CONTENT, SC_NON_AUTHORITATIVE_INFORMATION, SC_NOT_ACCEPTABLE, SC_NOT_FOUND, SC_NOT_IMPLEMENTED, SC_NOT_MODIFIED, SC_OK, SC_PARTIAL_CONTENT, SC_PAYMENT_REQUIRED, SC_PRECONDITION_FAILED, SC_PROXY_AUTHENTICATION_REQUIRED, SC_REQUEST_ENTITY_TOO_LARGE, SC_REQUEST_TIMEOUT, SC_REQUEST_URI_TOO_LONG, SC_REQUESTED_RANGE_NOT_SATISFIABLE, SC_RESET_CONTENT, SC_SEE_OTHER, SC_SERVICE_UNAVAILABLE, SC_SWITCHING_PROTOCOLS, SC_TEMPORARY_REDIRECT, SC_UNAUTHORIZED, SC_UNSUPPORTED_MEDIA_TYPE, SC_USE_PROXY
 
Constructor Summary
HttpResponseBuffer(javax.servlet.http.HttpServletResponse response)
           
 
Method Summary
 void disableBuffering()
          Disables the buffering of the output.
 void flushBuffer()
           
 java.io.OutputStream getBuffer()
           
 int getBufferSize()
           
 javax.servlet.ServletOutputStream getOutputStream()
           
 javax.servlet.http.HttpServletResponse getWrappee()
           
 java.io.PrintWriter getWriter()
           
 javax.xml.stream.XMLStreamWriter getXMLWriter()
          Returns an XMLStreamWriter for writing a response with XML content.
 javax.xml.stream.XMLStreamWriter getXMLWriter(boolean setCharacterEncoding)
          Returns an XMLStreamWriter for writing a response with XML content.
 void reset()
           
 void validate()
          Performs a schema-based validation of the response (only if the written output has been buffered and was XML).
 
Methods inherited from class javax.servlet.http.HttpServletResponseWrapper
addCookie, addDateHeader, addHeader, addIntHeader, containsHeader, encodeRedirectUrl, encodeRedirectURL, encodeUrl, encodeURL, sendError, sendError, sendRedirect, setDateHeader, setHeader, setIntHeader, setStatus, setStatus
 
Methods inherited from class javax.servlet.ServletResponseWrapper
getCharacterEncoding, getContentType, getLocale, getResponse, isCommitted, resetBuffer, setBufferSize, setCharacterEncoding, setContentLength, setContentType, setLocale, setResponse
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.servlet.ServletResponse
getCharacterEncoding, getContentType, getLocale, isCommitted, resetBuffer, setBufferSize, setCharacterEncoding, setContentLength, setContentType, setLocale
 

Constructor Detail

HttpResponseBuffer

public HttpResponseBuffer(javax.servlet.http.HttpServletResponse response)
Parameters:
response -
Method Detail

getWrappee

public javax.servlet.http.HttpServletResponse getWrappee()
Returns:
the underlying servlet response

disableBuffering

public void disableBuffering()
Disables the buffering of the output.

This method may only be called, if neither getWriter(), getOutputStream() nor getXMLWriter() has been called before.


getWriter

public java.io.PrintWriter getWriter()
                              throws java.io.IOException
Specified by:
getWriter in interface javax.servlet.ServletResponse
Overrides:
getWriter in class javax.servlet.ServletResponseWrapper
Throws:
java.io.IOException

getOutputStream

public javax.servlet.ServletOutputStream getOutputStream()
                                                  throws java.io.IOException
Specified by:
getOutputStream in interface javax.servlet.ServletResponse
Overrides:
getOutputStream in class javax.servlet.ServletResponseWrapper
Throws:
java.io.IOException

getXMLWriter

public javax.xml.stream.XMLStreamWriter getXMLWriter()
                                              throws java.io.IOException,
                                                     javax.xml.stream.XMLStreamException
Returns an XMLStreamWriter for writing a response with XML content.

NOTE: This method may be called more than once -- the first call will create an XMLStreamWriter object and subsequent calls return the same object. This provides a convenient means to produce plain XML responses and SOAP wrapped response bodies with the same code.

Returns:
XMLStreamWriter for writing the response, with XML preamble already written
Throws:
java.io.IOException
javax.xml.stream.XMLStreamException

getXMLWriter

public javax.xml.stream.XMLStreamWriter getXMLWriter(boolean setCharacterEncoding)
                                              throws java.io.IOException,
                                                     javax.xml.stream.XMLStreamException
Returns an XMLStreamWriter for writing a response with XML content.

NOTE: This method may be called more than once -- the first call will create an XMLStreamWriter object and subsequent calls return the same object. This provides a convenient means to produce plain XML responses and SOAP wrapped response bodies with the same code.

Parameters:
setCharacterEncoding - true, if the response's character encoding should be set, false otherwise
Returns:
XMLStreamWriter for writing the response, with XML preamble already written
Throws:
java.io.IOException
javax.xml.stream.XMLStreamException

validate

public void validate()
Performs a schema-based validation of the response (only if the written output has been buffered and was XML).


flushBuffer

public void flushBuffer()
                 throws java.io.IOException
Specified by:
flushBuffer in interface javax.servlet.ServletResponse
Overrides:
flushBuffer in class javax.servlet.ServletResponseWrapper
Throws:
java.io.IOException

reset

public void reset()
Specified by:
reset in interface javax.servlet.ServletResponse
Overrides:
reset in class javax.servlet.ServletResponseWrapper

getBufferSize

public int getBufferSize()
Specified by:
getBufferSize in interface javax.servlet.ServletResponse
Overrides:
getBufferSize in class javax.servlet.ServletResponseWrapper

getBuffer

public java.io.OutputStream getBuffer()
Returns:
the buffer


Copyright © 2011. All Rights Reserved.