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 b04e3509..a911fe02 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
@@ -16,6 +16,7 @@
package org.springframework.ws.transport.http;
+import java.util.Iterator;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -70,6 +71,15 @@ public class MessageDispatcherServlet extends FrameworkServlet {
/** Well-known name for the {@link WebServiceMessageReceiver} object in the bean factory for this namespace. */
public static final String DEFAULT_MESSAGE_RECEIVER_BEAN_NAME = "messageReceiver";
+ /**
+ * Well-known name for the {@link WebServiceMessageReceiverHandlerAdapter} object in the bean factory for this
+ * namespace.
+ */
+ public static final String DEFAULT_MESSAGE_RECEIVER_HANDLER_ADAPTER_BEAN_NAME = "messageReceiverHandlerAdapter";
+
+ /** Well-known name for the {@link WsdlDefinitionHandlerAdapter} object in the bean factory for this namespace. */
+ public static final String DEFAULT_WSDL_DEFINITION_HANDLER_ADAPTER_BEAN_NAME = "wsdlDefinitionHandlerAdapter";
+
/**
* Name of the class path resource (relative to the {@link MessageDispatcherServlet} class) that defines
* MessageDispatcherServlet's default strategy names.
@@ -83,12 +93,15 @@ public class MessageDispatcherServlet extends FrameworkServlet {
private String messageFactoryBeanName = DEFAULT_MESSAGE_FACTORY_BEAN_NAME;
+ private String messageReceiverHandlerAdapterBeanName = DEFAULT_MESSAGE_RECEIVER_HANDLER_ADAPTER_BEAN_NAME;
+
/** The {@link WebServiceMessageReceiverHandlerAdapter} used by this servlet. */
- private WebServiceMessageReceiverHandlerAdapter messageReceiverHandlerAdapter =
- new WebServiceMessageReceiverHandlerAdapter();
+ private WebServiceMessageReceiverHandlerAdapter messageReceiverHandlerAdapter;
+
+ private String wsdlDefinitionHandlerAdapterBeanName = DEFAULT_WSDL_DEFINITION_HANDLER_ADAPTER_BEAN_NAME;
/** The {@link WsdlDefinitionHandlerAdapter} used by this servlet. */
- private WsdlDefinitionHandlerAdapter wsdlDefinitionHandlerAdapter = new WsdlDefinitionHandlerAdapter();
+ private WsdlDefinitionHandlerAdapter wsdlDefinitionHandlerAdapter;
private String messageReceiverBeanName = DEFAULT_MESSAGE_RECEIVER_BEAN_NAME;
@@ -140,6 +153,32 @@ public class MessageDispatcherServlet extends FrameworkServlet {
return transformWsdlLocations;
}
+ /** Returns the bean name used to lookup a {@link WebServiceMessageReceiverHandlerAdapter}. */
+ public String getMessageReceiverHandlerAdapterBeanName() {
+ return messageReceiverHandlerAdapterBeanName;
+ }
+
+ /**
+ * Sets the bean name used to lookup a {@link WebServiceMessageReceiverHandlerAdapter}. Defaults to {@link
+ * #DEFAULT_MESSAGE_RECEIVER_HANDLER_ADAPTER_BEAN_NAME}.
+ */
+ public void setMessageReceiverHandlerAdapterBeanName(String messageReceiverHandlerAdapterBeanName) {
+ this.messageReceiverHandlerAdapterBeanName = messageReceiverHandlerAdapterBeanName;
+ }
+
+ /** Returns the bean name used to lookup a {@link WsdlDefinitionHandlerAdapter}. */
+ public String getWsdlDefinitionHandlerAdapterBeanName() {
+ return wsdlDefinitionHandlerAdapterBeanName;
+ }
+
+ /**
+ * Sets the bean name used to lookup a {@link WsdlDefinitionHandlerAdapter}. Defaults to {@link
+ * #DEFAULT_WSDL_DEFINITION_HANDLER_ADAPTER_BEAN_NAME}.
+ */
+ public void setWsdlDefinitionHandlerAdapterBeanName(String wsdlDefinitionHandlerAdapterBeanName) {
+ this.wsdlDefinitionHandlerAdapterBeanName = wsdlDefinitionHandlerAdapterBeanName;
+ }
+
/**
* Sets whether relative address locations in the WSDL are to be transformed using the request URI of the incoming
* {@link HttpServletRequest}. Defaults to false.
@@ -160,7 +199,8 @@ public class MessageDispatcherServlet extends FrameworkServlet {
}
protected void initFrameworkServlet() throws ServletException, BeansException {
- initHandlerAdapters();
+ initMessageReceiverHandlerAdapter();
+ initWsdlDefinitionHandlerAdapter();
initMessageReceiver();
initWsdlDefinitions();
}
@@ -200,23 +240,25 @@ public class MessageDispatcherServlet extends FrameworkServlet {
}
}
- private void initHandlerAdapters() throws BeansException {
+ private void initMessageReceiverHandlerAdapter() {
try {
- // setup the receiver adapter
- messageReceiverHandlerAdapter = new WebServiceMessageReceiverHandlerAdapter();
+ try {
+ messageReceiverHandlerAdapter = (WebServiceMessageReceiverHandlerAdapter) getWebApplicationContext()
+ .getBean(getMessageReceiverHandlerAdapterBeanName(),
+ WebServiceMessageReceiverHandlerAdapter.class);
+ }
+ catch (NoSuchBeanDefinitionException ignored) {
+ messageReceiverHandlerAdapter = new WebServiceMessageReceiverHandlerAdapter();
+ }
initWebServiceMessageFactory();
messageReceiverHandlerAdapter.afterPropertiesSet();
- // setup the wsdl adapter
- wsdlDefinitionHandlerAdapter = new WsdlDefinitionHandlerAdapter();
- wsdlDefinitionHandlerAdapter.setTransformLocations(isTransformWsdlLocations());
- wsdlDefinitionHandlerAdapter.afterPropertiesSet();
}
catch (Exception ex) {
- throw new BeanInitializationException("Could not initialize handler adapters", ex);
+ throw new BeanInitializationException("Could not initialize WebServiceMessageReceiverHandlerAdapter", ex);
}
}
- private void initWebServiceMessageFactory() throws Exception {
+ private void initWebServiceMessageFactory() {
WebServiceMessageFactory messageFactory;
try {
messageFactory = (WebServiceMessageFactory) getWebApplicationContext()
@@ -232,6 +274,24 @@ public class MessageDispatcherServlet extends FrameworkServlet {
messageReceiverHandlerAdapter.setMessageFactory(messageFactory);
}
+ private void initWsdlDefinitionHandlerAdapter() {
+ try {
+ try {
+ wsdlDefinitionHandlerAdapter = (WsdlDefinitionHandlerAdapter) getWebApplicationContext()
+ .getBean(getWsdlDefinitionHandlerAdapterBeanName(), WsdlDefinitionHandlerAdapter.class);
+
+ }
+ catch (NoSuchBeanDefinitionException ignored) {
+ wsdlDefinitionHandlerAdapter = new WsdlDefinitionHandlerAdapter();
+ }
+ wsdlDefinitionHandlerAdapter.setTransformLocations(isTransformWsdlLocations());
+ wsdlDefinitionHandlerAdapter.afterPropertiesSet();
+ }
+ catch (Exception ex) {
+ throw new BeanInitializationException("Could not initialize WsdlDefinitionHandlerAdapter", ex);
+ }
+ }
+
private void initMessageReceiver() {
try {
messageReceiver = (WebServiceMessageReceiver) getWebApplicationContext()
@@ -253,5 +313,13 @@ public class MessageDispatcherServlet extends FrameworkServlet {
private void initWsdlDefinitions() {
wsdlDefinitions = BeanFactoryUtils
.beansOfTypeIncludingAncestors(getWebApplicationContext(), WsdlDefinition.class, true, false);
+ if (logger.isDebugEnabled()) {
+ for (Iterator iterator = wsdlDefinitions.entrySet().iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ String beanName = (String) entry.getKey();
+ WsdlDefinition definition = (WsdlDefinition) entry.getValue();
+ logger.debug("Exposing [" + definition + "] as " + beanName + WSDL_SUFFIX_NAME);
+ }
+ }
}
}
diff --git a/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java b/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java
index 89e0d996..9c420296 100644
--- a/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java
+++ b/core/src/main/java/org/springframework/ws/transport/http/WebServiceMessageReceiverHandlerAdapter.java
@@ -55,12 +55,11 @@ public class WebServiceMessageReceiverHandlerAdapter extends WebServiceMessageRe
if ("POST".equals(httpServletRequest.getMethod())) {
WebServiceConnection connection = new HttpServletConnection(httpServletRequest, httpServletResponse);
handleConnection(connection, (WebServiceMessageReceiver) handler);
- return null;
}
else {
httpServletResponse.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
- return null;
}
+ return null;
}
public boolean supports(Object handler) {
diff --git a/core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java b/core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java
index 8d74b6f7..48eda361 100644
--- a/core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java
+++ b/core/src/main/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapter.java
@@ -19,7 +19,6 @@ package org.springframework.ws.transport.http;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
-import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.Source;
@@ -114,22 +113,24 @@ public class WsdlDefinitionHandlerAdapter extends TransformerObjectSupport imple
public ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
- if (!"GET".equals(request.getMethod())) {
- throw new ServletException("Request method '" + request.getMethod() + "' not supported");
+ if ("GET".equals(request.getMethod())) {
+ response.setContentType(CONTENT_TYPE);
+ Transformer transformer = createTransformer();
+ WsdlDefinition definition = (WsdlDefinition) handler;
+ Source definitionSource = definition.getSource();
+ if (transformLocations) {
+ DOMResult domResult = new DOMResult();
+ transformer.transform(definitionSource, domResult);
+ Document definitionDocument = (Document) domResult.getNode();
+ transformLocations(definitionDocument, request);
+ definitionSource = new DOMSource(definitionDocument);
+ }
+ StreamResult responseResult = new StreamResult(response.getOutputStream());
+ transformer.transform(definitionSource, responseResult);
}
- response.setContentType(CONTENT_TYPE);
- Transformer transformer = createTransformer();
- WsdlDefinition definition = (WsdlDefinition) handler;
- Source definitionSource = definition.getSource();
- if (transformLocations) {
- DOMResult domResult = new DOMResult();
- transformer.transform(definitionSource, domResult);
- Document definitionDocument = (Document) domResult.getNode();
- transformLocations(definitionDocument, request);
- definitionSource = new DOMSource(definitionDocument);
+ else {
+ response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
}
- StreamResult responseResult = new StreamResult(response.getOutputStream());
- transformer.transform(definitionSource, responseResult);
return null;
}
diff --git a/core/src/test/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapterTest.java b/core/src/test/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapterTest.java
index 1c20b9a1..0fa65ddc 100644
--- a/core/src/test/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapterTest.java
+++ b/core/src/test/java/org/springframework/ws/transport/http/WsdlDefinitionHandlerAdapterTest.java
@@ -19,7 +19,7 @@ package org.springframework.ws.transport.http;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.net.URI;
-import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
import javax.wsdl.Definition;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
@@ -71,14 +71,10 @@ public class WsdlDefinitionHandlerAdapterTest extends XMLTestCase {
public void testHandleNonGet() throws Exception {
request.setMethod("POST");
definitionControl.replay();
- try {
- adapter.handle(request, response, definitionMock);
- fail("ServletException expected");
- }
- catch (ServletException ex) {
- // expected
- }
+ adapter.handle(request, response, definitionMock);
definitionControl.verify();
+ assertEquals("METHOD_NOT_ALLOWED expected", HttpServletResponse.SC_METHOD_NOT_ALLOWED, response.getStatus());
+
}
public void testTransformLocations() throws Exception {
diff --git a/pom.xml b/pom.xml
index 630c59d7..7cd5382e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -130,7 +130,7 @@
java.net
- Java.net Repository for Maven2
+ Java.net Repository for Maven
http://download.java.net/maven/1/
legacy