Package org.apache.tuscany.binding.celtix

Source Code of org.apache.tuscany.binding.celtix.CeltixInvokerTestCase

/*
* 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.tuscany.binding.celtix;

import java.net.URL;
import javax.wsdl.Definition;
import javax.wsdl.Port;
import javax.wsdl.Service;
import javax.wsdl.factory.WSDLFactory;
import javax.wsdl.xml.WSDLReader;
import javax.xml.namespace.QName;

import org.xml.sax.InputSource;

import junit.framework.TestCase;
import org.apache.tuscany.binding.celtix.io.SCADataBindingCallback;
import org.easymock.classextension.EasyMock;
import org.objectweb.celtix.Bus;
import org.objectweb.celtix.bindings.BindingManager;
import org.objectweb.celtix.bus.bindings.soap.SOAPBindingFactory;
import org.objectweb.celtix.bus.bindings.soap.SOAPClientBinding;
import org.objectweb.celtix.context.ObjectMessageContextImpl;
import org.objectweb.celtix.ws.addressing.EndpointReferenceType;

/**
* @version $Rev: 437771 $ $Date: 2006-08-28 11:23:53 -0700 (Mon, 28 Aug 2006) $
*/
public class CeltixInvokerTestCase extends TestCase {

    public void testProcessingInputWithoutInOut() throws Exception {
        String wsdlLocation = "/wsdl/hello_world_doc_lit.wsdl";
        String operationName = "greetMe";
        ObjectMessageContextImpl inputCtx = new ObjectMessageContextImpl();
        CeltixInvoker invoker = createCeltixInvoker(wsdlLocation,
            operationName, inputCtx);

        Object[] args = new Object[1];
        args[0] = new String("hello");
        invoker.invokeTarget(args);

        // Check the input object after processing is correct
        // Should be no change for input if only IN parameters involved
        Object[] myrtn = (Object[]) inputCtx.getMessageObjects();

        assertEquals("hello", myrtn[0]);
    }

    public void testProcessingInputWithInOut() throws Exception {
        String wsdlLocation = "/wsdl/hello_world_doc_lit_inout.wsdl";
        String operationName = "greetMe";
        ObjectMessageContextImpl inputCtx = new ObjectMessageContextImpl();
        CeltixInvoker invoker = createCeltixInvoker(wsdlLocation,
            operationName, inputCtx);

        Object[] args = new Object[1];
        String inputvalue = new String("hello");
        args[0] = inputvalue;
        Object result = invoker.invokeTarget(args);

        // Check the input object after processing is correct
        // input should be wrapped as Holder type if it is INOUT parameter
        Object[] myrtn = (Object[]) inputCtx.getMessageObjects();

        //FIXME: this does not work for the wrapped doc/lit case due to a bug in Celtix
        //assertTrue("input is not Holder type", myrtn[0] instanceof Holder);
    }

    // NOTE: For convenience this method presumes the soap service name is
    // SOAPService and port name is SoapPort
    private CeltixInvoker createCeltixInvoker(String wsdlLocation,
                                              String operationName,
                                              ObjectMessageContextImpl inputCtx)
        throws Exception {

        // Make following call to return a mocked SOAPClientBinding:
        // bus.getBindingManager().getBindingFactory(bindingId).createClientBinding(reference)
        SOAPClientBinding clientBinding = EasyMock
            .createMock(SOAPClientBinding.class);
        clientBinding.createObjectContext();
        EasyMock.expectLastCall().andReturn(inputCtx);
        clientBinding.invoke(EasyMock.isA(ObjectMessageContextImpl.class),
            EasyMock.isA(SCADataBindingCallback.class));
        EasyMock.expectLastCall().andReturn(new ObjectMessageContextImpl());
        EasyMock.replay(clientBinding);

        SOAPBindingFactory bindingFactory = EasyMock.createNiceMock(SOAPBindingFactory.class);
        bindingFactory.createClientBinding(EasyMock.isA(EndpointReferenceType.class));
        EasyMock.expectLastCall().andReturn(clientBinding);
        EasyMock.replay(bindingFactory);

        BindingManager bindingManager = EasyMock.createNiceMock(BindingManager.class);
        String bindingId = "http://schemas.xmlsoap.org/wsdl/soap/";
        bindingManager.getBindingFactory(bindingId);
        EasyMock.expectLastCall().andReturn(bindingFactory);

        Bus bus = EasyMock.createNiceMock(Bus.class);
        bus.getBindingManager();
        EasyMock.expectLastCall().andReturn(bindingManager);
        EasyMock.replay(bindingManager);
        EasyMock.replay(bus);

        // Create WSDL Definition
        URL url = getClass().getResource(wsdlLocation);
        assertNotNull("Could not find wsdl " + url.toString(), url);

        WSDLFactory factory = WSDLFactory.newInstance();
        WSDLReader reader = factory.newWSDLReader();
        reader.setFeature("javax.wsdl.verbose", false);
        InputSource input = new InputSource(url.openStream());
        Definition wsdlDef = reader.readWSDL(url.toString(), input);
        QName qName = new QName("http://objectweb.org/hello_world_soap_http", "SOAPService");
        Service wsdlService = wsdlDef.getService(qName);
        Port port = wsdlService.getPort("SoapPort");

        return new CeltixInvoker(operationName, bus, port, wsdlService, wsdlDef, null);
    }

}
TOP

Related Classes of org.apache.tuscany.binding.celtix.CeltixInvokerTestCase

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.