org.springframework.integration.http.inbound
Class HttpRequestHandlingMessagingGateway

java.lang.Object
  extended by org.springframework.integration.context.IntegrationObjectSupport
      extended by org.springframework.integration.endpoint.AbstractEndpoint
          extended by org.springframework.integration.gateway.MessagingGatewaySupport
              extended by org.springframework.integration.http.inbound.HttpRequestHandlingMessagingGateway
All Implemented Interfaces:
BeanFactoryAware, BeanNameAware, InitializingBean, Lifecycle, Phased, SmartLifecycle, NamedComponent, TrackableComponent, HttpRequestHandler

public class HttpRequestHandlingMessagingGateway
extends MessagingGatewaySupport
implements HttpRequestHandler

Inbound Messaging Gateway that handles HTTP Requests. May be configured as a bean in the Application Context and delegated to from a simple HttpRequestHandlerServlet in web.xml where the servlet and bean both have the same name. If the expectReply property is set to true, a response can generated from a reply Message. Otherwise, the gateway will play the role of a unidirectional Channel Adapter with a simple status-based response (e.g. 200 OK).

The default supported request methods are GET and POST, but the list of values can be configured with the supportedMethods property. The payload generated from a GET request (or HEAD or OPTIONS if supported) will be a MultiValueMap containing the parameter values. For a request containing a body (e.g. a POST), the type of the payload is determined by the request payload type.

If the HTTP request is a multipart and a "multipartResolver" bean has been defined in the context, then it will be converted by the MultipartAwareFormHttpMessageConverter as long as the default message converters have not been overwritten (although providing a customized instance of the Multipart-aware converter is also an option).

By default a number of HttpMessageConverters are already configured. The list can be overridden by calling the setMessageConverters(List) method.

Since:
2.0

Field Summary
 
Fields inherited from class org.springframework.integration.context.IntegrationObjectSupport
logger
 
Constructor Summary
HttpRequestHandlingMessagingGateway()
           
HttpRequestHandlingMessagingGateway(boolean expectReply)
           
 
Method Summary
protected  java.lang.Object doHandleRequest(javax.servlet.http.HttpServletRequest servletRequest, javax.servlet.http.HttpServletResponse servletResponse)
          Handles the HTTP request by generating a Message and sending it to the request channel.
 java.lang.String getComponentType()
          Subclasses may implement this method to provide component type information.
protected  java.util.List<HttpMessageConverter<?>> getMessageConverters()
           
 void handleRequest(javax.servlet.http.HttpServletRequest servletRequest, javax.servlet.http.HttpServletResponse servletResponse)
          Handles the HTTP request by generating a Message and sending it to the request channel.
protected  boolean isExpectReply()
           
protected  void onInit()
          Locates the MultipartResolver bean based on the default name defined by the DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME constant if available.
 void setConvertExceptions(boolean convertExceptions)
          Flag to determine if conversion and writing out of message handling exceptions should be attempted (default false, in which case they will simply be re-thrown).
 void setExtractReplyPayload(boolean extractReplyPayload)
          Specify whether only the reply Message's payload should be passed in the response.
 void setHeaderMapper(HeaderMapper<HttpHeaders> headerMapper)
          Set the HeaderMapper to use when mapping between HTTP headers and MessageHeaders.
 void setMessageConverters(java.util.List<HttpMessageConverter<?>> messageConverters)
          Set the message body converters to use.
 void setMultipartResolver(MultipartResolver multipartResolver)
          Specify the MultipartResolver to use when checking requests.
 void setRequestPayloadType(java.lang.Class<?> requestPayloadType)
          Specify the type of payload to be generated when the inbound HTTP request content is read by the HttpMessageConverters.
 void setSupportedMethodNames(java.lang.String... supportedMethods)
          Specify the supported request method names for this gateway.
 void setSupportedMethods(HttpMethod... supportedMethods)
          Specify the supported request methods for this gateway.
 
Methods inherited from class org.springframework.integration.gateway.MessagingGatewaySupport
doStart, doStop, receive, send, sendAndReceive, sendAndReceiveMessage, setExceptionMapper, setReplyChannel, setReplyMapper, setReplyTimeout, setRequestChannel, setRequestMapper, setRequestTimeout, setShouldThrowErrors, setShouldTrack
 
Methods inherited from class org.springframework.integration.endpoint.AbstractEndpoint
getPhase, isAutoStartup, isRunning, setAutoStartup, setPhase, setTaskScheduler, start, stop, stop
 
Methods inherited from class org.springframework.integration.context.IntegrationObjectSupport
afterPropertiesSet, getBeanFactory, getComponentName, getConversionService, getTaskScheduler, setBeanFactory, setBeanName, setComponentName, setConversionService, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.springframework.integration.context.NamedComponent
getComponentName
 

Constructor Detail

HttpRequestHandlingMessagingGateway

public HttpRequestHandlingMessagingGateway()

HttpRequestHandlingMessagingGateway

public HttpRequestHandlingMessagingGateway(boolean expectReply)
Method Detail

setConvertExceptions

public void setConvertExceptions(boolean convertExceptions)
Flag to determine if conversion and writing out of message handling exceptions should be attempted (default false, in which case they will simply be re-thrown). If the flag is true and no message converter can convert the exception a new exception will be thrown.

Parameters:
convertExceptions - the flag to set

handleRequest

public final void handleRequest(javax.servlet.http.HttpServletRequest servletRequest,
                                javax.servlet.http.HttpServletResponse servletResponse)
                         throws javax.servlet.ServletException,
                                java.io.IOException
Handles the HTTP request by generating a Message and sending it to the request channel. If this gateway's 'expectReply' property is true, it will also generate a response from the reply Message once received. That response will be written by the HttpMessageConverters.

Specified by:
handleRequest in interface HttpRequestHandler
Throws:
javax.servlet.ServletException
java.io.IOException

isExpectReply

protected boolean isExpectReply()
Returns:
whether to expect reply

setMessageConverters

public void setMessageConverters(java.util.List<HttpMessageConverter<?>> messageConverters)
Set the message body converters to use. These converters are used to convert from and to HTTP requests and responses.


getMessageConverters

protected java.util.List<HttpMessageConverter<?>> getMessageConverters()

setHeaderMapper

public void setHeaderMapper(HeaderMapper<HttpHeaders> headerMapper)
Set the HeaderMapper to use when mapping between HTTP headers and MessageHeaders.


setSupportedMethodNames

public void setSupportedMethodNames(java.lang.String... supportedMethods)
Specify the supported request method names for this gateway. By default, only GET and POST are supported.


setSupportedMethods

public void setSupportedMethods(HttpMethod... supportedMethods)
Specify the supported request methods for this gateway. By default, only GET and POST are supported.


setRequestPayloadType

public void setRequestPayloadType(java.lang.Class<?> requestPayloadType)
Specify the type of payload to be generated when the inbound HTTP request content is read by the HttpMessageConverters. By default this value is null which means at runtime any "text" Content-Type will result in String while all others default to byte[].class.


setExtractReplyPayload

public void setExtractReplyPayload(boolean extractReplyPayload)
Specify whether only the reply Message's payload should be passed in the response. If this is set to 'false', the entire Message will be used to generate the response. The default is 'true'.


setMultipartResolver

public void setMultipartResolver(MultipartResolver multipartResolver)
Specify the MultipartResolver to use when checking requests. If no resolver is provided, the "multipartResolver" bean in the context will be used as a fallback. If that is not available either, this endpoint will not support multipart requests.


getComponentType

public java.lang.String getComponentType()
Description copied from class: IntegrationObjectSupport
Subclasses may implement this method to provide component type information.

Specified by:
getComponentType in interface NamedComponent
Overrides:
getComponentType in class MessagingGatewaySupport

onInit

protected void onInit()
               throws java.lang.Exception
Locates the MultipartResolver bean based on the default name defined by the DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME constant if available.

Overrides:
onInit in class MessagingGatewaySupport
Throws:
java.lang.Exception

doHandleRequest

protected final java.lang.Object doHandleRequest(javax.servlet.http.HttpServletRequest servletRequest,
                                                 javax.servlet.http.HttpServletResponse servletResponse)
                                          throws java.io.IOException
Handles the HTTP request by generating a Message and sending it to the request channel. If this gateway's 'expectReply' property is true, it will also generate a response from the reply Message once received.

Throws:
java.io.IOException