Package org.apache.servicemix.http

Source Code of org.apache.servicemix.http.HttpSoapTest

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.servicemix.http;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URI;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.jbi.messaging.ExchangeStatus;
import javax.jbi.messaging.Fault;
import javax.jbi.messaging.InOut;
import javax.jbi.messaging.MessageExchange;
import javax.jbi.messaging.MessagingException;
import javax.jbi.messaging.NormalizedMessage;
import javax.servlet.http.HttpServletResponse;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;

import junit.framework.TestCase;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpMethodRetryHandler;
import org.apache.commons.httpclient.methods.InputStreamRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.apache.commons.httpclient.params.HttpMethodParams;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.servicemix.client.DefaultServiceMixClient;
import org.apache.servicemix.client.Destination;
import org.apache.servicemix.client.ServiceMixClient;
import org.apache.servicemix.components.util.EchoComponent;
import org.apache.servicemix.components.util.TransformComponentSupport;
import org.apache.servicemix.jbi.FaultException;
import org.apache.servicemix.jbi.container.JBIContainer;
import org.apache.servicemix.jbi.jaxp.SourceTransformer;
import org.apache.servicemix.jbi.jaxp.StringSource;
import org.apache.servicemix.jbi.resolver.ServiceNameEndpointResolver;
import org.apache.servicemix.jbi.util.ByteArrayDataSource;
import org.apache.servicemix.jbi.util.DOMUtil;
import org.apache.servicemix.jbi.util.FileUtil;
import org.apache.servicemix.soap.marshalers.JBIMarshaler;
import org.apache.servicemix.soap.marshalers.SoapMarshaler;
import org.apache.servicemix.tck.ReceiverComponent;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

import com.ibm.wsdl.util.xml.DOMUtils;

public class HttpSoapTest extends TestCase {
    private static Log logger =  LogFactory.getLog(HttpSoapTest.class);

    protected JBIContainer container;
   
    protected void setUp() throws Exception {
        container = new JBIContainer();
        container.setUseMBeanServer(false);
        container.setCreateMBeanServer(false);
        container.setEmbedded(true);
        container.init();
    }
   
    protected void tearDown() throws Exception {
        if (container != null) {
            container.shutDown();
        }
    }
   
    public void testFaultOnParse() throws Exception {
        HttpComponent http = new HttpComponent();
        HttpEndpoint ep = new HttpEndpoint();
        ep.setService(new QName("urn:test", "echo"));
        ep.setEndpoint("echo");
        ep.setLocationURI("http://localhost:8192/ep1/");
        ep.setRoleAsString("consumer");
        ep.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep.setSoap(true);
        http.setEndpoints(new HttpEndpoint[] { ep });
        container.activateComponent(http, "http");
        container.start();
       
        PostMethod method = new PostMethod("http://localhost:8192/ep1/");
        method.setRequestEntity(new StringRequestEntity("<hello>world</hello>"));
        int state = new HttpClient().executeMethod(method);
        assertEquals(HttpServletResponse.SC_BAD_REQUEST, state);
        FileUtil.copyInputStream(method.getResponseBodyAsStream(), System.out);
    }

    public void testSoap() throws Exception {
        EchoComponent echo = new EchoComponent();
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpComponent http = new HttpComponent();
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "echo"));
        ep1.setEndpoint("echo");
        ep1.setLocationURI("http://localhost:8192/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "s2"));
        ep2.setEndpoint("ep2");
        ep2.setLocationURI("http://localhost:8192/ep1/");
        ep2.setRoleAsString("provider");
        ep2.setSoap(true);
       
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2 });
       
        container.activateComponent(http, "http");
       
        container.start();
       
        ServiceMixClient client = new DefaultServiceMixClient(container);
        client.request(new ServiceNameEndpointResolver(new QName("urn:test", "s2")), null, null,
                       new StreamSource(getClass().getResourceAsStream("soap-request.xml")));
       
    }
   
    public void testSoapRoundtripConsumerProvider() throws Exception {
        EchoComponent echo = new EchoComponent();
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpComponent http = new HttpComponent();
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "s1"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "echo"));
        ep1.setLocationURI("http://localhost:8192/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "s2"));
        ep2.setEndpoint("ep2");
        ep2.setLocationURI("http://localhost:8192/ep1/");
        ep2.setRoleAsString("provider");
        ep2.setSoap(true);
       
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2 });
       
        container.activateComponent(http, "http");
       
        container.start();
       
        ServiceMixClient client = new DefaultServiceMixClient(container);
        Destination dest = client.createDestination("service:urn:test:s2");
        InOut me = dest.createInOutExchange();
        me.getInMessage().setContent(new StringSource("<hello>world</hello>"));
        client.sendSync(me);
        assertEquals(ExchangeStatus.ACTIVE, me.getStatus());
        String str = new SourceTransformer().contentToString(me.getOutMessage());
        client.done(me);
        logger.info(str);
    }

    public void testSoapRoundtripProviderConsumerProvider() throws Exception {
        EchoComponent echo = new EchoComponent();
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpComponent http = new HttpComponent();
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "s1"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "s2"));
        ep1.setLocationURI("http://localhost:8192/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "s2"));
        ep2.setEndpoint("ep2");
        ep2.setLocationURI("http://localhost:8192/ep3/");
        ep2.setRoleAsString("provider");
        ep2.setSoap(true);
       
        HttpEndpoint ep3 = new HttpEndpoint();
        ep3.setService(new QName("urn:test", "s3"));
        ep3.setEndpoint("ep3");
        ep3.setTargetService(new QName("urn:test", "echo"));
        ep3.setLocationURI("http://localhost:8192/ep3/");
        ep3.setRoleAsString("consumer");
        ep3.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep3.setSoap(true);
       
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2, ep3 });
       
        container.activateComponent(http, "http");
       
        container.start();
       
        PostMethod method = new PostMethod("http://localhost:8192/ep1/");
        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new HttpMethodRetryHandler() {
            public boolean retryMethod(HttpMethod method, IOException exception, int executionCount) {
                return false;
            }
        });
        method.setRequestEntity(new StringRequestEntity("<env:Envelope xmlns:env='http://www.w3.org/2003/05/soap-envelope'><env:Body><hello>world</hello></env:body</env:Envelope>"));
        int state = new HttpClient().executeMethod(method);
        assertEquals(HttpServletResponse.SC_OK, state);
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        FileUtil.copyInputStream(method.getResponseBodyAsStream(), baos);
        logger.info(baos.toString());
    }

    public void testSoapFault12() throws Exception {
        TransformComponentSupport echo = new TransformComponentSupport() {
            protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws MessagingException {
                Fault f = exchange.createFault();
                f.setContent(new StringSource("<hello xmlns='myuri'>this is a fault</hello>"));
                f.setProperty(JBIMarshaler.SOAP_FAULT_REASON, "My reason");
                throw new FaultException(null, exchange, f);
            }
        };
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "http"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "echo"));
        ep1.setTargetEndpoint("echo");
        ep1.setLocationURI("http://localhost:8193/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "http"));
        ep2.setEndpoint("ep2");
        ep2.setTargetService(new QName("urn:test", "http"));
        ep2.setTargetEndpoint("ep3");
        ep2.setLocationURI("http://localhost:8193/ep2/");
        ep2.setRoleAsString("consumer");
        ep2.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep2.setSoap(true);
       
        HttpEndpoint ep3 = new HttpEndpoint();
        ep3.setService(new QName("urn:test", "http"));
        ep3.setEndpoint("ep3");
        ep3.setLocationURI("http://localhost:8193/ep1/");
        ep3.setRoleAsString("provider");
        ep3.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep3.setSoap(true);
       
        HttpComponent http = new HttpComponent();
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2, ep3 });
        container.activateComponent(http, "http1");
       
        container.start();
       
        PostMethod method = new PostMethod("http://localhost:8193/ep2/");
        method.setRequestEntity(new InputStreamRequestEntity(getClass().getResourceAsStream("soap-request-12.xml")));
        int state = new HttpClient().executeMethod(method);
        assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, state);
        SourceTransformer st = new SourceTransformer();
        Node node = st.toDOMNode(new StreamSource(method.getResponseBodyAsStream()));
        logger.info(st.toString(node));

        Element e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));

        method = new PostMethod("http://localhost:8193/ep2/");
        method.setRequestBody("hello");
        state = new HttpClient().executeMethod(method);
        String str = method.getResponseBodyAsString();
        logger.info(str);
        assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, state);
        node = st.toDOMNode(new StringSource(str));
        e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));

        method = new PostMethod("http://localhost:8193/ep2/");
        method.setRequestBody("<hello/>");
        state = new HttpClient().executeMethod(method);
        str = method.getResponseBodyAsString();
        logger.info(str);
        assertEquals(HttpServletResponse.SC_BAD_REQUEST, state);
        node = st.toDOMNode(new StringSource(str));
        e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));
    }
   
    public void testSoapFault11() throws Exception {
        TransformComponentSupport echo = new TransformComponentSupport() {
            protected boolean transform(MessageExchange exchange, NormalizedMessage in, NormalizedMessage out) throws MessagingException {
                Fault f = exchange.createFault();
                f.setContent(new StringSource("<hello xmlns='myuri'>this is a fault</hello>"));
                f.setProperty(JBIMarshaler.SOAP_FAULT_REASON, "My reason");
                throw new FaultException(null, exchange, f);
            }
        };
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "http"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "echo"));
        ep1.setTargetEndpoint("echo");
        ep1.setLocationURI("http://localhost:8194/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
        ep1.setSoapVersion("1.1");
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "http"));
        ep2.setEndpoint("ep2");
        ep2.setTargetService(new QName("urn:test", "http"));
        ep2.setTargetEndpoint("ep3");
        ep2.setLocationURI("http://localhost:8194/ep2/");
        ep2.setRoleAsString("consumer");
        ep2.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep2.setSoap(true);
        ep2.setSoapVersion("1.1");
       
        HttpEndpoint ep3 = new HttpEndpoint();
        ep3.setService(new QName("urn:test", "http"));
        ep3.setEndpoint("ep3");
        ep3.setLocationURI("http://localhost:8194/ep1/");
        ep3.setRoleAsString("provider");
        ep3.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep3.setSoap(true);
        ep3.setSoapVersion("1.1");
       
        HttpComponent http = new HttpComponent();
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2, ep3 });
        container.activateComponent(http, "http1");
       
        container.start();
       
        PostMethod method = new PostMethod("http://localhost:8194/ep2/");
        method.setRequestEntity(new InputStreamRequestEntity(getClass().getResourceAsStream("soap-request.xml")));
        int state = new HttpClient().executeMethod(method);
        String str = method.getResponseBodyAsString();
        logger.info(str);
        assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, state);
        SourceTransformer st = new SourceTransformer();
        Node node = st.toDOMNode(new StringSource(str));

        Element e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));
       
        method = new PostMethod("http://localhost:8194/ep2/");
        method.setRequestBody("hello");
        state = new HttpClient().executeMethod(method);
        str = method.getResponseBodyAsString();
        logger.info(str);
        assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, state);
        node = st.toDOMNode(new StringSource(str));
        e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));

        method = new PostMethod("http://localhost:8194/ep2/");
        method.setRequestBody("<hello/>");
        state = new HttpClient().executeMethod(method);
        str = method.getResponseBodyAsString();
        logger.info(str);
        assertEquals(HttpServletResponse.SC_BAD_REQUEST, state);
        node = st.toDOMNode(new StringSource(str));
        e = ((Document) node).getDocumentElement();
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtils.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_11_URI, SoapMarshaler.FAULT), DOMUtil.getQName(e));
    }

    public void testSoapXml() throws Exception {
        ReceiverComponent echo = new ReceiverComponent();
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "http"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "echo"));
        ep1.setTargetEndpoint("echo");
        ep1.setLocationURI("http://localhost:8193/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-only"));
        ep1.setSoap(false);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "http"));
        ep2.setEndpoint("ep2");
        ep2.setTargetService(new QName("urn:test", "http"));
        ep2.setTargetEndpoint("ep3");
        ep2.setLocationURI("http://localhost:8193/ep2/");
        ep2.setRoleAsString("consumer");
        ep2.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-only"));
        ep2.setSoap(true);
       
        HttpEndpoint ep3 = new HttpEndpoint();
        ep3.setService(new QName("urn:test", "http"));
        ep3.setEndpoint("ep3");
        ep3.setLocationURI("http://localhost:8193/ep1/");
        ep3.setRoleAsString("provider");
        ep3.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-only"));
        ep3.setSoap(true);
       
        HttpComponent http = new HttpComponent();
        http.setEndpoints(new HttpEndpoint[] { ep1, ep2, ep3 });
        container.activateComponent(http, "http1");
       
        container.start();
       
        PostMethod method = new PostMethod("http://localhost:8193/ep2/");
        method.setRequestEntity(new InputStreamRequestEntity(getClass().getResourceAsStream("request.xml")));
        new HttpClient().executeMethod(method);
       
        echo.getMessageList().assertMessagesReceived(1);
        List msgs = echo.getMessageList().flushMessages();
        NormalizedMessage msg = (NormalizedMessage) msgs.get(0);
        SourceTransformer st = new SourceTransformer();
        Element e = st.toDOMElement(msg);
        String strMsg = DOMUtil.asXML(e);
        logger.info(strMsg);

        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.ENVELOPE), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName(SoapMarshaler.SOAP_12_URI, SoapMarshaler.BODY), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName("http://ws.location.services.cardinal.com/", "listAllProvider"), DOMUtil.getQName(e));
        e = DOMUtil.getFirstChildElement(e);
        assertEquals(new QName("", "clientSessionGuid"), DOMUtil.getQName(e));
    }
   
    public void testAttachments() throws Exception {
        EchoComponent echo = new EchoComponent();
        echo.setService(new QName("urn:test", "echo"));
        echo.setEndpoint("echo");
        container.activateComponent(echo, "echo");
       
        HttpComponent http = new HttpComponent();
       
        HttpEndpoint ep0 = new HttpEndpoint();
        ep0.setService(new QName("urn:test", "s0"));
        ep0.setEndpoint("ep0");
        ep0.setLocationURI("http://localhost:8192/ep1/");
        ep0.setRoleAsString("provider");
        ep0.setSoap(true);
       
        HttpEndpoint ep1 = new HttpEndpoint();
        ep1.setService(new QName("urn:test", "s1"));
        ep1.setEndpoint("ep1");
        ep1.setTargetService(new QName("urn:test", "s2"));
        ep1.setLocationURI("http://localhost:8192/ep1/");
        ep1.setRoleAsString("consumer");
        ep1.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep1.setSoap(true);
       
        HttpEndpoint ep2 = new HttpEndpoint();
        ep2.setService(new QName("urn:test", "s2"));
        ep2.setEndpoint("ep2");
        ep2.setLocationURI("http://localhost:8192/ep3/");
        ep2.setRoleAsString("provider");
        ep2.setSoap(true);
       
        HttpEndpoint ep3 = new HttpEndpoint();
        ep3.setService(new QName("urn:test", "s3"));
        ep3.setEndpoint("ep3");
        ep3.setTargetService(new QName("urn:test", "echo"));
        ep3.setLocationURI("http://localhost:8192/ep3/");
        ep3.setRoleAsString("consumer");
        ep3.setDefaultMep(URI.create("http://www.w3.org/2004/08/wsdl/in-out"));
        ep3.setSoap(true);
       
        http.setEndpoints(new HttpEndpoint[] { ep0, ep1, ep2, ep3 });
       
        container.activateComponent(http, "http");
       
        container.start();
       
        DefaultServiceMixClient client = new DefaultServiceMixClient(container);
        Destination d = client.createDestination("service:urn:test:s0");
        InOut me = d.createInOutExchange();
        me.getInMessage().setContent(new StringSource("<hello>world</hello>"));
        File f = new File(getClass().getResource("servicemix.jpg").getFile());
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        FileUtil.copyInputStream(new FileInputStream(f), baos);
        DataSource ds = new ByteArrayDataSource(baos.toByteArray(), "image/jpeg");
        DataHandler dh = new DataHandler(ds);
        me.getInMessage().addAttachment("image", dh);
        client.sendSync(me);
        assertEquals(ExchangeStatus.ACTIVE, me.getStatus());
        assertEquals(1, me.getOutMessage().getAttachmentNames().size());
        client.done(me);
    }
   
}
TOP

Related Classes of org.apache.servicemix.http.HttpSoapTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.