diff --git a/sandbox/src/main/java/org/springframework/ws/client/WebServiceTemplate.java b/sandbox/src/main/java/org/springframework/ws/client/WebServiceTemplate.java index 10cce47a..85547e2c 100644 --- a/sandbox/src/main/java/org/springframework/ws/client/WebServiceTemplate.java +++ b/sandbox/src/main/java/org/springframework/ws/client/WebServiceTemplate.java @@ -25,7 +25,10 @@ import javax.xml.transform.TransformerException; import org.springframework.oxm.Marshaller; import org.springframework.oxm.Unmarshaller; import org.springframework.ws.WebServiceMessage; +import org.springframework.ws.WebServiceMessageFactory; +import org.springframework.ws.client.support.WebServiceAccessor; import org.springframework.ws.context.MessageContext; +import org.springframework.ws.transport.WebServiceMessageSender; /** * @author Arjen Poutsma @@ -36,6 +39,29 @@ public class WebServiceTemplate extends WebServiceAccessor implements WebService private Unmarshaller unmarshaller; + /** + * Creates a new WebServiceTemplate. + *

+ * Note that the message factory and message sender properties have to be set before this template can be + * used. + * + * @see #setMessageFactory(org.springframework.ws.WebServiceMessageFactory) + * @see #setMessageSender(org.springframework.ws.transport.WebServiceMessageSender) + */ + public WebServiceTemplate() { + } + + /** + * Creates a new WebServiceTemplate based on the given message factory and message sender. + * + * @param messageFactory the message factory to use + * @param messageSender the message sender to use + */ + public WebServiceTemplate(WebServiceMessageFactory messageFactory, WebServiceMessageSender messageSender) { + setMessageFactory(messageFactory); + setMessageSender(messageSender); + } + /** * Returns the marshaller for this template. */ diff --git a/sandbox/src/main/java/org/springframework/ws/client/WebServiceAccessor.java b/sandbox/src/main/java/org/springframework/ws/client/support/WebServiceAccessor.java similarity index 98% rename from sandbox/src/main/java/org/springframework/ws/client/WebServiceAccessor.java rename to sandbox/src/main/java/org/springframework/ws/client/support/WebServiceAccessor.java index 2006abd0..f274db64 100644 --- a/sandbox/src/main/java/org/springframework/ws/client/WebServiceAccessor.java +++ b/sandbox/src/main/java/org/springframework/ws/client/support/WebServiceAccessor.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ws.client; +package org.springframework.ws.client.support; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.Assert; diff --git a/sandbox/src/main/java/org/springframework/ws/client/support/WebServiceGatewaySupport.java b/sandbox/src/main/java/org/springframework/ws/client/support/WebServiceGatewaySupport.java new file mode 100644 index 00000000..143c46b3 --- /dev/null +++ b/sandbox/src/main/java/org/springframework/ws/client/support/WebServiceGatewaySupport.java @@ -0,0 +1,169 @@ +/* + * Copyright 2007 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.ws.client.support; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.BeanInitializationException; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.oxm.Marshaller; +import org.springframework.oxm.Unmarshaller; +import org.springframework.ws.WebServiceMessageFactory; +import org.springframework.ws.client.WebServiceTemplate; +import org.springframework.ws.transport.WebServiceMessageSender; + +/** + * Convenient super class for application classes that need Web service access. + *

+ * Requires a {@link org.springframework.ws.WebServiceMessageFactory} and {@link org.springframework.ws.transport.WebServiceMessageSender}, + * or a {@link org.springframework.ws.client.WebServiceTemplate} instance to be set. It will create its own + * WebServiceTemplate if WebServiceMessageFactory and WebServiceMessageSender are + * passed in. + *

+ * In addition to the message factory and sender properties, this gateway offers {@link + * org.springframework.oxm.Marshaller} and {@link org.springframework.oxm.Unmarshaller} properties. Setting these is + * required when the {@link org.springframework.ws.client.WebServiceTemplate#marshalSendAndReceive(Object) marshalling + * methods} of the template are to be used. + * + * @author Arjen Poutsma + * @see #setMessageFactory(org.springframework.ws.WebServiceMessageFactory) + * @see #setMessageSender(org.springframework.ws.transport.WebServiceMessageSender) + * @see org.springframework.ws.client.WebServiceTemplate + * @see #setMarshaller(org.springframework.oxm.Marshaller) + */ +public abstract class WebServiceGatewaySupport implements InitializingBean { + + protected final Log logger = LogFactory.getLog(getClass()); + + private WebServiceMessageFactory messageFactory; + + private WebServiceMessageSender messageSender; + + private WebServiceTemplate webServiceTemplate; + + private Marshaller marshaller; + + private Unmarshaller unmarshaller; + + /** + * Returns the WebServiceMessageFactory used by the gateway. + */ + public final WebServiceMessageFactory getMessageFactory() { + return messageFactory; + } + + /** + * Set the WebServiceMessageFactory to be used by the gateway. + */ + public final void setMessageFactory(WebServiceMessageFactory messageFactory) { + this.messageFactory = messageFactory; + } + + /** + * Returns the WebServiceMessageSender used by the gateway. + */ + public final WebServiceMessageSender getMessageSender() { + return messageSender; + } + + /** + * Sets the WebServiceMessageSender to be used by the gateway. + */ + public final void setMessageSender(WebServiceMessageSender messageSender) { + this.messageSender = messageSender; + } + + /** + * Returns the WebServiceTemplate for the gateway. + */ + public final WebServiceTemplate getWebServiceTemplate() { + return webServiceTemplate; + } + + /** + * Sets the WebServiceTemplate to be used by the gateway. + */ + public final void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) { + this.webServiceTemplate = webServiceTemplate; + } + + /** + * Returns the Marshaller used by the gateway. + */ + public final Marshaller getMarshaller() { + return marshaller; + } + + /** + * Sets the Marshaller used by the gateway. Setting this property is only required if the marshalling + * functionality of WebServiceTemplate is to be used. + * + * @see org.springframework.ws.client.WebServiceTemplate#marshalSendAndReceive + */ + public void setMarshaller(Marshaller marshaller) { + this.marshaller = marshaller; + } + + /** + * Returns the Unmarshaller used by the gateway. + */ + public final Unmarshaller getUnmarshaller() { + return unmarshaller; + } + + /** + * Sets the Unmarshaller used by the gateway. Setting this property is only required if the marshalling + * functionality of WebServiceTemplate is to be used. + * + * @see org.springframework.ws.client.WebServiceTemplate#marshalSendAndReceive + */ + public final void setUnmarshaller(Unmarshaller unmarshaller) { + this.unmarshaller = unmarshaller; + } + + public final void afterPropertiesSet() throws IllegalArgumentException, BeanInitializationException { + if (webServiceTemplate == null && messageFactory != null && messageSender != null) { + webServiceTemplate = new WebServiceTemplate(messageFactory, messageSender); + if (marshaller != null) { + webServiceTemplate.setMarshaller(marshaller); + } + if (unmarshaller != null) { + webServiceTemplate.setUnmarshaller(unmarshaller); + } + } + if (webServiceTemplate == null) { + throw new IllegalArgumentException("messageFactory and messageSender or webServiceTemplate is required"); + } + try { + initGateway(); + } + catch (Exception ex) { + throw new BeanInitializationException("Initialization of Web service gateway failed: " + ex.getMessage(), + ex); + } + } + + /** + * Subclasses can override this for custom initialization behavior. Gets called after population of this instance's + * bean properties. + * + * @throws java.lang.Exception if initialization fails + */ + protected void initGateway() throws Exception { + } + +} diff --git a/sandbox/src/main/java/org/springframework/ws/transport/WebServiceMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/WebServiceMessageSender.java index 28806e7f..c7fbe8bd 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/WebServiceMessageSender.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/WebServiceMessageSender.java @@ -5,6 +5,9 @@ import java.io.IOException; import org.springframework.ws.context.MessageContext; /** + * Defines the methods for classes capable of sending and receiving {@link org.springframework.ws.WebServiceMessage} + * instances across a transport. + * * @author Arjen Poutsma */ public interface WebServiceMessageSender { diff --git a/sandbox/src/main/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSender.java new file mode 100644 index 00000000..70398cf5 --- /dev/null +++ b/sandbox/src/main/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSender.java @@ -0,0 +1,53 @@ +/* + * Copyright 2007 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.ws.transport.http; + +import java.net.URL; + +import org.springframework.beans.factory.InitializingBean; +import org.springframework.util.Assert; +import org.springframework.ws.transport.WebServiceMessageSender; + +/** + * Abstract base class for {@link org.springframework.ws.transport.WebServiceMessageSender} implementations that use + * HTTP. + * + * @author Arjen Poutsma + */ +public abstract class AbstractHttpWebServiceMessageSender implements WebServiceMessageSender, InitializingBean { + + private URL url; + + /** + * Returns the url used by this message sender. + */ + public URL getUrl() { + return url; + } + + /** + * Sets the url used by this message sender. + */ + public void setUrl(URL url) { + this.url = url; + } + + public void afterPropertiesSet() throws Exception { + Assert.notNull(url, "url is required"); + } + +} diff --git a/sandbox/src/main/java/org/springframework/ws/transport/http/CommonsHttpMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/http/CommonsHttpMessageSender.java index 245ba2a0..f32230d7 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/http/CommonsHttpMessageSender.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/http/CommonsHttpMessageSender.java @@ -17,7 +17,6 @@ package org.springframework.ws.transport.http; import java.io.IOException; -import java.net.URL; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpStatus; @@ -26,7 +25,6 @@ import org.apache.commons.httpclient.methods.PostMethod; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.context.MessageContext; import org.springframework.ws.transport.TransportInputStream; -import org.springframework.ws.transport.WebServiceMessageSender; /** * WebServiceMessageSender implementation that uses Jakarta @@ -38,12 +36,10 @@ import org.springframework.ws.transport.WebServiceMessageSender; * @author Arjen Poutsma * @see org.springframework.ws.transport.http.HttpUrlConnectionMessageSender */ -public class CommonsHttpMessageSender implements WebServiceMessageSender { +public class CommonsHttpMessageSender extends AbstractHttpWebServiceMessageSender { private HttpClient httpClient; - private URL url; - /** * Create a new instance of the CommonsHttpMessageSender with a default HttpClient that * uses a default MultiThreadedHttpConnectionManager. @@ -166,18 +162,4 @@ public class CommonsHttpMessageSender implements WebServiceMessageSender { } } } - - /** - * Returns the url used by this message sender. - */ - public URL getUrl() { - return url; - } - - /** - * Sets the url used by this message sender. - */ - public void setUrl(URL url) { - this.url = url; - } } diff --git a/sandbox/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSender.java b/sandbox/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSender.java index 34ad360e..704fb5a3 100644 --- a/sandbox/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSender.java +++ b/sandbox/src/main/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSender.java @@ -18,14 +18,12 @@ package org.springframework.ws.transport.http; import java.io.IOException; import java.net.HttpURLConnection; -import java.net.URL; import java.net.URLConnection; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.context.MessageContext; import org.springframework.ws.transport.TransportInputStream; import org.springframework.ws.transport.TransportOutputStream; -import org.springframework.ws.transport.WebServiceMessageSender; /** * WebServiceMessageSender implementation that uses standard J2SE facilities to execute POST requests, @@ -38,26 +36,10 @@ import org.springframework.ws.transport.WebServiceMessageSender; * @author Arjen Poutsma * @see java.net.HttpURLConnection */ -public class HttpUrlConnectionMessageSender implements WebServiceMessageSender { +public class HttpUrlConnectionMessageSender extends AbstractHttpWebServiceMessageSender { private static final String HTTP_METHOD_POST = "POST"; - private URL url; - - /** - * Returns the url used by this message sender. - */ - public URL getUrl() { - return url; - } - - /** - * Sets the url used by this message sender. - */ - public void setUrl(URL url) { - this.url = url; - } - public void sendAndReceive(MessageContext messageContext) throws IOException { HttpURLConnection connection = openConnection(); try { @@ -123,4 +105,5 @@ public class HttpUrlConnectionMessageSender implements WebServiceMessageSender { } } } + } diff --git a/sandbox/src/test/java/org/springframework/ws/client/WebServiceAccessorTest.java b/sandbox/src/test/java/org/springframework/ws/client/support/WebServiceAccessorTest.java similarity index 98% rename from sandbox/src/test/java/org/springframework/ws/client/WebServiceAccessorTest.java rename to sandbox/src/test/java/org/springframework/ws/client/support/WebServiceAccessorTest.java index 3a7eedfb..d91fe635 100644 --- a/sandbox/src/test/java/org/springframework/ws/client/WebServiceAccessorTest.java +++ b/sandbox/src/test/java/org/springframework/ws/client/support/WebServiceAccessorTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.ws.client; +package org.springframework.ws.client.support; import junit.framework.TestCase; import org.easymock.MockControl; diff --git a/sandbox/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java b/sandbox/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java index b92d6645..34145c1d 100644 --- a/sandbox/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java +++ b/sandbox/src/test/java/org/springframework/ws/transport/http/AbstractHttpWebServiceMessageSenderTestCase.java @@ -16,21 +16,37 @@ package org.springframework.ws.transport.http; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.net.URL; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.xml.soap.MessageFactory; +import javax.xml.soap.SOAPMessage; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMResult; +import javax.xml.transform.stream.StreamSource; -import junit.framework.TestCase; +import org.custommonkey.xmlunit.XMLTestCase; +import org.custommonkey.xmlunit.XMLUnit; import org.mortbay.jetty.Server; import org.mortbay.jetty.servlet.Context; import org.mortbay.jetty.servlet.ServletHolder; import org.springframework.util.FileCopyUtils; +import org.springframework.ws.context.DefaultMessageContext; +import org.springframework.ws.context.MessageContext; +import org.springframework.ws.soap.saaj.SaajSoapMessage; +import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; +import org.springframework.xml.transform.StringResult; +import org.springframework.xml.transform.StringSource; -public abstract class AbstractHttpWebServiceMessageSenderTestCase extends TestCase { +public abstract class AbstractHttpWebServiceMessageSenderTestCase extends XMLTestCase { protected Server jettyServer; @@ -40,33 +56,103 @@ public abstract class AbstractHttpWebServiceMessageSenderTestCase extends TestCa protected static final String URL = "http://localhost:8888"; + protected static final String REQUEST = ""; + + protected static final String EXPECTED_SOAP_REQUEST = + "" + "" + + "" + REQUEST + "" + ""; + + protected static final String RESPONSE = ""; + + protected Transformer transformer; + + protected AbstractHttpWebServiceMessageSender messageSender; + + private MessageFactory messageFactory; + + private String receivedRequest; + + private String receivedHeader; + protected final void setUp() throws Exception { - onSetUp(); + messageFactory = MessageFactory.newInstance(); + transformer = TransformerFactory.newInstance().newTransformer(); jettyServer = new Server(8888); Context root = new Context(jettyServer, "/"); - root.addServlet(new ServletHolder(new EchoServlet()), "/*"); + root.addServlet(new ServletHolder(new ResponseServlet()), "/response"); + root.addServlet(new ServletHolder(new NoResponseServlet()), "/noresponse"); jettyServer.start(); + messageSender = createMessageSender(); + XMLUnit.setIgnoreWhitespace(true); } - protected void onSetUp() throws Exception { - - } + protected abstract AbstractHttpWebServiceMessageSender createMessageSender(); protected final void tearDown() throws Exception { jettyServer.stop(); } - private static class EchoServlet extends GenericServlet { + public void testSendAndReceiveResponse() throws Exception { + messageSender.setUrl(new URL("http://localhost:8888/response")); + SOAPMessage saajRequest = messageFactory.createMessage(); + saajRequest.getMimeHeaders().addHeader(HEADER_NAME, HEADER_VALUE); + transformer.transform(new StringSource(REQUEST), new DOMResult(saajRequest.getSOAPBody())); + SaajSoapMessage request = new SaajSoapMessage(saajRequest); + MessageContext context = new DefaultMessageContext(request, new SaajSoapMessageFactory(messageFactory)); + messageSender.sendAndReceive(context); + assertXMLEqual(EXPECTED_SOAP_REQUEST, receivedRequest.toString()); + assertEquals("Invalid header value received", HEADER_VALUE, receivedHeader); + assertTrue("No response", context.hasResponse()); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + context.getResponse().writeTo(os); + assertXMLEqual(RESPONSE, os.toString("UTF-8")); + } + + public void testSendAndReceiveNoResponse() throws Exception { + messageSender.setUrl(new URL("http://localhost:8888/noresponse")); + SOAPMessage saajRequest = messageFactory.createMessage(); + transformer.transform(new StringSource(REQUEST), new DOMResult(saajRequest.getSOAPBody())); + SaajSoapMessage request = new SaajSoapMessage(saajRequest); + MessageContext context = new DefaultMessageContext(request, new SaajSoapMessageFactory(messageFactory)); + messageSender.sendAndReceive(context); + assertFalse("Response", context.hasResponse()); + } + + private class ResponseServlet extends GenericServlet { public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { - HttpServletRequest httpServletRequest = (HttpServletRequest) req; - HttpServletResponse httpServletResponse = (HttpServletResponse) res; - httpServletResponse.setStatus(HttpServletResponse.SC_OK); -// assertEquals("Invalid header", HEADER_VALUE, httpServletRequest.getHeader(HEADER_NAME)); + try { + StringResult requestResult = new StringResult(); + transformer.transform(new StreamSource(req.getInputStream()), requestResult); + receivedRequest = requestResult.toString(); + receivedHeader = ((HttpServletRequest) req).getHeader(HEADER_NAME); - httpServletResponse.addHeader("Content-Type", "text/xml"); - httpServletResponse.addHeader(HEADER_NAME, HEADER_VALUE); - FileCopyUtils.copy(req.getInputStream(), res.getOutputStream()); + HttpServletResponse httpServletResponse = (HttpServletResponse) res; + httpServletResponse.setStatus(HttpServletResponse.SC_OK); + httpServletResponse.addHeader("Content-Type", "text/xml"); + FileCopyUtils.copy(RESPONSE.getBytes("UTF-8"), res.getOutputStream()); + } + catch (TransformerException ex) { + throw new ServletException(ex); + } + } + } + + private class NoResponseServlet extends GenericServlet { + + public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { + try { + StringResult requestResult = new StringResult(); + transformer.transform(new StreamSource(req.getInputStream()), requestResult); + receivedRequest = requestResult.toString(); + receivedHeader = ((HttpServletRequest) req).getHeader(HEADER_NAME); + + HttpServletResponse httpServletResponse = (HttpServletResponse) res; + httpServletResponse.setStatus(HttpServletResponse.SC_NO_CONTENT); + } + catch (TransformerException ex) { + throw new ServletException(ex); + } } } } diff --git a/sandbox/src/test/java/org/springframework/ws/transport/http/CommonsHttpMessageSenderTest.java b/sandbox/src/test/java/org/springframework/ws/transport/http/CommonsHttpMessageSenderTest.java index 6b634c01..6f16e3c2 100644 --- a/sandbox/src/test/java/org/springframework/ws/transport/http/CommonsHttpMessageSenderTest.java +++ b/sandbox/src/test/java/org/springframework/ws/transport/http/CommonsHttpMessageSenderTest.java @@ -16,33 +16,10 @@ package org.springframework.ws.transport.http; -import java.net.URL; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; - -import org.springframework.ws.context.DefaultMessageContext; -import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; - public class CommonsHttpMessageSenderTest extends AbstractHttpWebServiceMessageSenderTestCase { - private CommonsHttpMessageSender sender; - - private MessageFactory messageFactory; - - protected void onSetUp() throws Exception { - sender = new CommonsHttpMessageSender(); - sender.setUrl(new URL(URL)); - messageFactory = MessageFactory.newInstance(); + protected AbstractHttpWebServiceMessageSender createMessageSender() { + return new CommonsHttpMessageSender(); } - public void testSend() throws Exception { - SOAPMessage message = messageFactory.createMessage(); - message.getMimeHeaders().addHeader(HEADER_NAME, HEADER_VALUE); - MessageContext context = new DefaultMessageContext(new SaajSoapMessageFactory(messageFactory)); - sender.sendAndReceive(context); - assertTrue("No response", context.hasResponse()); - - context.getResponse().writeTo(System.out); - } } diff --git a/sandbox/src/test/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSenderTest.java b/sandbox/src/test/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSenderTest.java index becb9e97..905f7b32 100644 --- a/sandbox/src/test/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSenderTest.java +++ b/sandbox/src/test/java/org/springframework/ws/transport/http/HttpUrlConnectionMessageSenderTest.java @@ -16,37 +16,9 @@ package org.springframework.ws.transport.http; -import java.net.URL; -import javax.xml.soap.MessageFactory; -import javax.xml.soap.SOAPMessage; - -import org.springframework.ws.context.DefaultMessageContext; -import org.springframework.ws.context.MessageContext; -import org.springframework.ws.soap.saaj.SaajSoapMessage; -import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; - public class HttpUrlConnectionMessageSenderTest extends AbstractHttpWebServiceMessageSenderTestCase { - private HttpUrlConnectionMessageSender sender; - - private MessageFactory messageFactory; - - protected void onSetUp() throws Exception { - sender = new HttpUrlConnectionMessageSender(); - sender.setUrl(new URL(URL)); - messageFactory = MessageFactory.newInstance(); - } - - public void testSend() throws Exception { - SOAPMessage message = messageFactory.createMessage(); - message.getMimeHeaders().addHeader(HEADER_NAME, HEADER_VALUE); - SaajSoapMessage request = new SaajSoapMessage(message); - MessageContext context = new DefaultMessageContext(request, new SaajSoapMessageFactory(messageFactory)); -// AxiomSoapMessageFactory soapMessageFactory = new AxiomSoapMessageFactory(); -// MessageContext context = new DefaultMessageContext(soapMessageFactory); - sender.sendAndReceive(context); - assertTrue("No response", context.hasResponse()); - - context.getResponse().writeTo(System.out); + protected AbstractHttpWebServiceMessageSender createMessageSender() { + return new HttpUrlConnectionMessageSender(); } } \ No newline at end of file