/*
* Copyright 2005-2011 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.io.File;
import javax.xml.namespace.QName;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPMessage;
import org.springframework.ws.transport.support.EchoPayloadEndpoint;
import org.springframework.ws.transport.support.FreePortScanner;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.mortbay.jetty.Server;
import org.mortbay.jetty.servlet.Context;
import org.mortbay.jetty.servlet.ServletHolder;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
/**
* @author Arjen Poutsma
*/
public class MessageDispatcherServletIntegrationTest {
private static Server jettyServer;
private static String url;
private MessageFactory messageFactory;
private SOAPConnectionFactory connectionFactory;
@BeforeClass
public static void startJetty() throws Exception {
int port = FreePortScanner.getFreePort();
url = "http://localhost:" + port;
jettyServer = new Server(port);
Context jettyContext = new Context(jettyServer, "/");
String resourceBase =
new File(MessageDispatcherServletIntegrationTest.class.getResource("WEB-INF").toURI()).getParent();
jettyContext.setResourceBase(resourceBase);
ServletHolder servletHolder = new ServletHolder(new MessageDispatcherServlet());
servletHolder.setName("sws");
jettyContext.addServlet(servletHolder, "/");
jettyServer.start();
}
@Before
public void setUpSaaj() throws SOAPException {
messageFactory = MessageFactory.newInstance();
connectionFactory = SOAPConnectionFactory.newInstance();
}
@AfterClass
public static void stopJetty() throws Exception {
if (jettyServer.isRunning()) {
jettyServer.stop();
}
}
@Test
public void echo() throws SOAPException {
SOAPMessage request = messageFactory.createMessage();
SOAPElement element = request.getSOAPBody().addChildElement(new QName(EchoPayloadEndpoint.NAMESPACE, EchoPayloadEndpoint.LOCAL_PART));
element.setTextContent("Hello World");
SOAPConnection connection = connectionFactory.createConnection();
SOAPMessage response = connection.call(request, url);
assertXMLEqual(request.getSOAPPart(), response.getSOAPPart());
}
}