blob: aace9f4163a40929aa8f30a32b9c225e02906b18 [file] [log] [blame]
package org.apache.servicemix.http.addressing;
import junit.framework.TestCase;
import org.apache.servicemix.components.util.EchoComponent;
import org.apache.servicemix.executors.impl.ExecutorFactoryImpl;
import org.apache.servicemix.http.HttpComponent;
import org.apache.servicemix.http.HttpEndpointType;
import org.apache.servicemix.http.endpoints.HttpSoapConsumerEndpoint;
import org.apache.servicemix.jbi.container.JBIContainer;
import org.apache.servicemix.jbi.util.FileUtil;
import org.apache.servicemix.soap.api.Policy;
import org.apache.servicemix.soap.util.DomUtil;
import org.apache.servicemix.soap.ws.addressing.WsAddressingPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.ClassPathResource;
import org.w3c.dom.Document;
import javax.jbi.servicedesc.ServiceEndpoint;
import javax.xml.namespace.QName;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
public class AddressingConsumerTest extends TestCase {
private final Logger logger = LoggerFactory.getLogger(AddressingConsumerTest.class);
String port1 = System.getProperty("http.port1", "61101");
protected JBIContainer container;
protected void setUp() throws Exception {
container = new JBIContainer();
container.setUseMBeanServer(false);
container.setCreateMBeanServer(false);
container.setEmbedded(true);
ExecutorFactoryImpl factory = new ExecutorFactoryImpl();
factory.getDefaultConfig().setQueueSize(0);
container.setExecutorFactory(factory);
container.init();
}
protected void tearDown() throws Exception {
if (container != null) {
container.shutDown();
}
}
protected void initSoapEndpoints(boolean useJbiWrapper) throws Exception {
HttpComponent http = new HttpComponent();
HttpSoapConsumerEndpoint ep1 = new HttpSoapConsumerEndpoint();
ep1.setService(new QName("uri:HelloWorld", "HelloService"));
ep1.setEndpoint("HelloPortSoap11");
ep1.setTargetService(new QName("urn:test", "echo"));
ep1.setLocationURI("http://localhost:"+port1+"/ep1/");
ep1.setWsdl(new ClassPathResource("/org/apache/servicemix/http/HelloWorld-DOC-soap12.wsdl"));
ep1.setValidateWsdl(false); // TODO: Soap 1.2 not handled yet
ep1.setUseJbiWrapper(useJbiWrapper);
ep1.setPolicies(new Policy[] { new WsAddressingPolicy() });
HttpSoapConsumerEndpoint ep2 = new HttpSoapConsumerEndpoint();
ep2.setService(new QName("uri:HelloWorld", "HelloService"));
ep2.setEndpoint("HelloPortSoap12");
ep2.setTargetService(new QName("urn:test", "echo"));
ep2.setLocationURI("http://localhost:"+port1+"/ep2/");
ep2.setWsdl(new ClassPathResource("/org/apache/servicemix/http/HelloWorld-DOC-soap12.wsdl"));
ep2.setValidateWsdl(false); // TODO: Soap 1.2 not handled yet
ep2.setUseJbiWrapper(useJbiWrapper);
ep2.setPolicies(new Policy[] { new WsAddressingPolicy() });
http.setEndpoints(new HttpEndpointType[] {ep1, ep2});
container.activateComponent(http, "http");
}
protected void initEchoEndpoint() throws Exception {
final Document wsdl = DomUtil.parse(getClass().getResourceAsStream("/org/apache/servicemix/http/Echo.wsdl"));
EchoComponent echo = new EchoComponent() {
@Override
public Document getServiceDescription(ServiceEndpoint endpoint) {
return wsdl;
}
};
echo.setService(new QName("http://test", "MyConsumerService"));
echo.setEndpoint("myConsumer");
container.activateComponent(echo, "echo");
}
public void testAddressing() throws Exception {
initSoapEndpoints(true);
initEchoEndpoint();
container.start();
URLConnection connection = new URL("http://localhost:"+port1+"/ep2/").openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
OutputStream os = connection.getOutputStream();
// Post the request file.
InputStream fis = getClass().getResourceAsStream("/org/apache/servicemix/http/addressing-request.xml");
FileUtil.copyInputStream(fis, os);
// Read the response.
InputStream is = connection.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
FileUtil.copyInputStream(is, baos);
logger.info("{}", baos);
}
}