From 6ebb764aba1cf4e5648c4973aa18bd79c7f403a9 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Sat, 9 Jun 2007 23:15:20 +0000 Subject: [PATCH] SWS-124 --- .../http/MessageDispatcherServlet.java | 74 ++++++++++++++----- src/changes/changes.xml | 3 + 2 files changed, 59 insertions(+), 18 deletions(-) diff --git a/core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java b/core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java index 1aaf0eee..7b3f0c98 100644 --- a/core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java +++ b/core/src/main/java/org/springframework/ws/transport/http/MessageDispatcherServlet.java @@ -64,10 +64,10 @@ import org.springframework.ws.wsdl.WsdlDefinition; public class MessageDispatcherServlet extends FrameworkServlet { /** Well-known name for the {@link WebServiceMessageFactory} bean in the bean factory for this namespace. */ - public static final String MESSAGE_FACTORY_BEAN_NAME = "messageFactory"; + public static final String DEFAULT_MESSAGE_FACTORY_BEAN_NAME = "messageFactory"; /** Well-known name for the {@link WebServiceMessageReceiver} object in the bean factory for this namespace. */ - public static final String MESSAGE_RECEIVER_BEAN_NAME = "messageReceiver"; + public static final String DEFAULT_MESSAGE_RECEIVER_BEAN_NAME = "messageReceiver"; /** * Name of the class path resource (relative to the {@link MessageDispatcherServlet} class) that defines @@ -80,6 +80,8 @@ public class MessageDispatcherServlet extends FrameworkServlet { private final DefaultStrategiesHelper defaultStrategiesHelper; + private String messageFactoryBeanName = DEFAULT_MESSAGE_FACTORY_BEAN_NAME; + /** The {@link WebServiceMessageReceiverHandlerAdapter} used by this servlet. */ private WebServiceMessageReceiverHandlerAdapter messageReceiverHandlerAdapter = new WebServiceMessageReceiverHandlerAdapter(); @@ -87,6 +89,8 @@ public class MessageDispatcherServlet extends FrameworkServlet { /** The {@link WsdlDefinitionHandlerAdapter} used by this servlet. */ private WsdlDefinitionHandlerAdapter wsdlDefinitionHandlerAdapter = new WsdlDefinitionHandlerAdapter(); + private String messageReceiverBeanName = DEFAULT_MESSAGE_RECEIVER_BEAN_NAME; + /** The {@link WebServiceMessageReceiver} used by this servlet. */ private WebServiceMessageReceiver messageReceiver; @@ -101,17 +105,57 @@ public class MessageDispatcherServlet extends FrameworkServlet { new ClassPathResource(DEFAULT_STRATEGIES_PATH, MessageDispatcherServlet.class)); } + /** Returns the bean name used to lookup a {@link WebServiceMessageFactory}. */ + public String getMessageFactoryBeanName() { + return messageFactoryBeanName; + } + + /** + * Sets the bean name used to lookup a {@link WebServiceMessageFactory}. Defaults to {@link + * #DEFAULT_MESSAGE_FACTORY_BEAN_NAME}. + */ + public void setMessageFactoryBeanName(String messageFactoryBeanName) { + this.messageFactoryBeanName = messageFactoryBeanName; + } + + /** Returns the bean name used to lookup a {@link WebServiceMessageReceiver}. */ + public String getMessageReceiverBeanName() { + return messageReceiverBeanName; + } + + /** + * Sets the bean name used to lookup a {@link WebServiceMessageReceiver}. Defaults to {@link + * #DEFAULT_MESSAGE_RECEIVER_BEAN_NAME}. + */ + public void setMessageReceiverBeanName(String messageReceiverBeanName) { + this.messageReceiverBeanName = messageReceiverBeanName; + } + + /** + * Indicates whether relative address locations in the WSDL are to be transformed using the request URI of the + * incoming {@link HttpServletRequest}. + */ + public boolean isTransformWsdlLocations() { + return transformWsdlLocations; + } + /** * Sets whether relative address locations in the WSDL are to be transformed using the request URI of the incoming - * {@link HttpServletRequest}.

Defaults to false. + * {@link HttpServletRequest}. Defaults to false. */ public void setTransformWsdlLocations(boolean transformWsdlLocations) { this.transformWsdlLocations = transformWsdlLocations; } - /** Returns the {@link WebServiceMessageReceiver} used by this servlet. */ - protected WebServiceMessageReceiver getMessageReceiver() { - return messageReceiver; + protected void doService(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) + throws Exception { + WsdlDefinition definition = getWsdlDefinition(httpServletRequest); + if (definition != null) { + wsdlDefinitionHandlerAdapter.handle(httpServletRequest, httpServletResponse, definition); + } + else { + messageReceiverHandlerAdapter.handle(httpServletRequest, httpServletResponse, messageReceiver); + } } protected void initFrameworkServlet() throws ServletException, BeansException { @@ -130,15 +174,9 @@ public class MessageDispatcherServlet extends FrameworkServlet { } } - protected void doService(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) - throws Exception { - WsdlDefinition definition = getWsdlDefinition(httpServletRequest); - if (definition != null) { - wsdlDefinitionHandlerAdapter.handle(httpServletRequest, httpServletResponse, definition); - } - else { - messageReceiverHandlerAdapter.handle(httpServletRequest, httpServletResponse, messageReceiver); - } + /** Returns the {@link WebServiceMessageReceiver} used by this servlet. */ + protected WebServiceMessageReceiver getMessageReceiver() { + return messageReceiver; } /** @@ -169,7 +207,7 @@ public class MessageDispatcherServlet extends FrameworkServlet { messageReceiverHandlerAdapter.afterPropertiesSet(); // setup the wsdl adapter wsdlDefinitionHandlerAdapter = new WsdlDefinitionHandlerAdapter(); - wsdlDefinitionHandlerAdapter.setTransformLocations(transformWsdlLocations); + wsdlDefinitionHandlerAdapter.setTransformLocations(isTransformWsdlLocations()); wsdlDefinitionHandlerAdapter.afterPropertiesSet(); } catch (Exception ex) { @@ -181,7 +219,7 @@ public class MessageDispatcherServlet extends FrameworkServlet { WebServiceMessageFactory messageFactory; try { messageFactory = (WebServiceMessageFactory) getWebApplicationContext() - .getBean(MESSAGE_FACTORY_BEAN_NAME, WebServiceMessageFactory.class); + .getBean(getMessageFactoryBeanName(), WebServiceMessageFactory.class); } catch (NoSuchBeanDefinitionException ignored) { messageFactory = (WebServiceMessageFactory) defaultStrategiesHelper @@ -196,7 +234,7 @@ public class MessageDispatcherServlet extends FrameworkServlet { private void initMessageReceiver() { try { messageReceiver = (WebServiceMessageReceiver) getWebApplicationContext() - .getBean(MESSAGE_RECEIVER_BEAN_NAME, WebServiceMessageReceiver.class); + .getBean(getMessageReceiverBeanName(), WebServiceMessageReceiver.class); } catch (NoSuchBeanDefinitionException ex) { messageReceiver = (WebServiceMessageReceiver) defaultStrategiesHelper diff --git a/src/changes/changes.xml b/src/changes/changes.xml index 8785c3c4..97c7ec62 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -6,6 +6,9 @@ + Allow specifying names of message factory and message + receiver in MessageDispatcherServlet + Added checkConnectionForFault to WebServiceTemplate to deal with Web services which are not WS-I compliant