Package org.objectweb.celtix.bus.bindings.xml

Source Code of org.objectweb.celtix.bus.bindings.xml.XMLBindingImplTest

package org.objectweb.celtix.bus.bindings.xml;

import java.io.*;
import java.net.*;
import java.util.*;
import javax.jws.WebResult;
import javax.xml.ws.WebFault;

import org.w3c.dom.*;

import junit.framework.TestCase;

import org.objectweb.celtix.bindings.DataBindingCallback;
import org.objectweb.celtix.bus.bindings.TestInputStreamContext;
import org.objectweb.celtix.bus.jaxws.JAXBDataBindingCallback;
import org.objectweb.celtix.context.GenericMessageContext;
import org.objectweb.celtix.context.ObjectMessageContext;
import org.objectweb.celtix.context.ObjectMessageContextImpl;
import org.objectweb.celtix.helpers.XMLUtils;
import org.objectweb.hello_world_xml_http.wrapped.Greeter;
import org.objectweb.hello_world_xml_http.wrapped.PingMeFault;
import org.objectweb.hello_world_xml_http.wrapped.types.FaultDetail;

public class XMLBindingImplTest extends TestCase {
    private XMLBindingImpl binding;
    private ObjectMessageContextImpl objContext;
    private XMLMessageContextImpl xmlContext;
    private XMLUtils xmlUtils;
   
    public XMLBindingImplTest(String arg0) {
        super(arg0);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(XMLBindingImplTest.class);
    }
   
    protected void setUp() throws Exception {
        super.setUp();
       
        xmlUtils = new XMLUtils();
        binding = new XMLBindingImpl(false);
        objContext = new ObjectMessageContextImpl();
        xmlContext = new XMLMessageContextImpl(new GenericMessageContext());
       
        objContext.setMethod(ClassUtils.getMethod(Greeter.class, "greetMe"));
    }
   
    public void testCreateBindingMessageContext() throws Exception {
        binding = new XMLBindingImpl(false);
        byte[] bArray = new byte[0];
        TestInputStreamContext inCtx = new TestInputStreamContext(bArray);
        assertNotNull(binding.createBindingMessageContext(inCtx));
    }
   
    public void testOperationName() throws Exception {
        JAXBDataBindingCallback callback =  new JAXBDataBindingCallback(objContext.getMethod(),
                                                                        DataBindingCallback.Mode.PARTS,
                                                                        null);
        String operationName = callback.getOperationName();
        assertNotNull(operationName);
        assertEquals("greetMe", operationName);
    }
   
    //Test The InputMessage of GreetMe Operation -- wrapped style
    public void testMarshalWrapInputMessage() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
        String arg0 = new String("TestXMLInputMessage");
        objContext.setMessageObjects(arg0);

        binding.marshal(objContext,
                        xmlContext,
                        new JAXBDataBindingCallback(objContext.getMethod(),
                                                    DataBindingCallback.Mode.PARTS,
                                                    null));
        XMLMessage msg = xmlContext.getMessage();
        assertNotNull(msg);

        InputStream is = getClass().getResourceAsStream("resources/GreetMeWrappedReq.xml");
        Document expectDOM = xmlUtils.parse(is);
        Document resultDOM = msg.getRoot();
        is.close();
        assertTrue(expectDOM.isEqualNode(resultDOM));
    }

    // Test sayHi operation which don't have part in request message.
    public void testMarshalWrapNoPart() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
        objContext.setMethod(ClassUtils.getMethod(Greeter.class, "sayHi"));
        binding.marshal(objContext,
                        xmlContext,
                        new JAXBDataBindingCallback(objContext.getMethod(),
                                                    DataBindingCallback.Mode.PARTS,
                                                    null));
        XMLMessage msg = xmlContext.getMessage();
        assertNotNull(msg);

        InputStream is = getClass().getResourceAsStream("resources/SayHiWrappedReq.xml");
        Document expectDOM = xmlUtils.parse(is);
        Document resultDOM = msg.getRoot();
        is.close();
        assertTrue(expectDOM.isEqualNode(resultDOM));
    }
   
    //Test the Output of GreetMe Operation
    public void testMarshalWrapOutputMessage() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
        objContext.setMessageObjects(new Object[0]);
       
        String arg0 = "TestXMLOutputMessage";
        objContext.setReturn(arg0);
       
        binding.marshal(objContext,
                        xmlContext,
                        new JAXBDataBindingCallback(objContext.getMethod(),
                                                    DataBindingCallback.Mode.PARTS,
                                                    null));
        XMLMessage msg = xmlContext.getMessage();
        assertNotNull(msg);
        assertTrue(msg.getRoot().hasChildNodes());
        NodeList list = msg.getRoot().getChildNodes();
        assertEquals(1, list.getLength());
        Node wrappedNode = list.item(0).getFirstChild();
        assertTrue(wrappedNode.hasChildNodes());
        assertEquals(arg0, wrappedNode.getFirstChild().getNodeValue());
    }

    // Test unmashall greetMe method
    public void testUnmarshalWrapInputMessage() throws Exception {
        String data = "TestXMLInputMessage";
        InputStream in = getClass().getResourceAsStream("resources/GreetMeWrappedReq.xml");
        assertNotNull(binding.getMessageFactory());
        XMLMessage xmlMessage = binding.getMessageFactory().createMessage(in);
        xmlContext.setMessage(xmlMessage);
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);
       
        //GreetMe method has a IN parameter
        objContext.setMessageObjects(new Object[1]);
        binding.unmarshal(xmlContext,
                          objContext,
                          new JAXBDataBindingCallback(objContext.getMethod(),
                                                      DataBindingCallback.Mode.PARTS,
                                                      null));
       
        Object[] params = objContext.getMessageObjects();
        assertNotNull(params);
        assertNull(objContext.getReturn());
        assertEquals(1, params.length);
        assertEquals(data, (String)params[0]);
    }

    public void testUnmarshalWrapOutputMessage() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
        String data = new String("TestXMLOutputMessage");
       
        InputStream in = getClass().getResourceAsStream("resources/GreetMeWrappedResp.xml");
        assertNotNull(binding.getMessageFactory());
        XMLMessage xmlMessage = binding.getMessageFactory().createMessage(in);
        xmlContext.setMessage(xmlMessage);

        binding.unmarshal(xmlContext,
                          objContext,
                          new JAXBDataBindingCallback(objContext.getMethod(),
                                                      DataBindingCallback.Mode.PARTS,
                                                      null));
       
        assertNull(objContext.getMessageObjects());
        assertNotNull(objContext.getReturn());
        assertEquals(data, (String)objContext.getReturn());
    }   

    public void testMethodAnnotation() throws Exception {
        JAXBDataBindingCallback callback = new JAXBDataBindingCallback(objContext.getMethod(),
                                                                       DataBindingCallback.Mode.PARTS,
                                                                       null);
        WebResult resultAnnotation  = callback.getWebResult();
        assertEquals("responseType", resultAnnotation.name());
    }

    public void testWrappedMarshalFault() throws Exception {

        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);

        String exMessage = new String("Test Exception");
        FaultDetail ec = new FaultDetail();
        ec.setMajor((short)2);
        ec.setMinor((short)1);
        PingMeFault ex = new PingMeFault(exMessage, ec);
        objContext.setException(ex);

        binding.marshalFault(objContext,
                             xmlContext,
                             new JAXBDataBindingCallback(objContext.getMethod(),
                                                         DataBindingCallback.Mode.PARTS,
                                                         null));
        XMLMessage msg = xmlContext.getMessage();

        assertNotNull(msg);
        Node xmlNode = msg.getRoot();

        assertNotNull(xmlNode);
        assertEquals(1, xmlNode.getChildNodes().getLength());
        assertTrue(msg.hasFault());
        XMLFault fault = msg.getFault();
        assertNotNull(fault);
        assertEquals(getExceptionString(ex, exMessage),
                     fault.getFaultString());

        assertTrue(fault.hasChildNodes());
        Node detail = fault.getFaultDetail();
        assertNotNull(detail);
       
        NodeList list = detail.getChildNodes();
        assertEquals(1, list.getLength());
       
        WebFault wfAnnotation = ex.getClass().getAnnotation(WebFault.class);
        assertEquals(wfAnnotation.targetNamespace(), list.item(0).getNamespaceURI());
        assertEquals(wfAnnotation.name(), list.item(0).getLocalName());
    }

    public void testMarshalSystemFaults() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, false);

        XMLBindingException se = new XMLBindingException("XML Binding  Exception");
        objContext.setException(se);

        binding.marshalFault(objContext,
                             xmlContext,
                             new JAXBDataBindingCallback(objContext.getMethod(),
                                                         DataBindingCallback.Mode.PARTS,
                                                         null));
        XMLMessage msg = xmlContext.getMessage();
       
        assertNotNull(msg);
        Node xmlNode = msg.getRoot();
        assertNotNull(xmlNode);
        assertEquals(1, xmlNode.getChildNodes().getLength());

        assertTrue(msg.hasFault());
        XMLFault fault = msg.getFault();
        assertNotNull(fault);
        assertEquals(getExceptionString(se, se.getMessage()),
                     fault.getFaultString());
        assertTrue(fault.hasChildNodes());
        NodeList list = fault.getFaultRoot().getChildNodes();
        assertEquals(1, list.getLength());        
    }

    public void testUnmarshalDocLiteralUserFaults() throws Exception {
        xmlContext.put(ObjectMessageContext.MESSAGE_INPUT, true);
        objContext.setMethod(ClassUtils.getMethod(Greeter.class, "pingMe"));

        InputStream is =  getClass().getResourceAsStream("resources/xmlfault.xml");
        XMLMessage faultMsg = binding.getMessageFactory().createMessage(is);
        xmlContext.setMessage(faultMsg);

        binding.unmarshalFault(xmlContext,
                               objContext,
                               new JAXBDataBindingCallback(objContext.getMethod(),
                                                           DataBindingCallback.Mode.PARTS,
                                                           null));
        assertNotNull(objContext.getException());
        Object faultEx = objContext.getException();
       
        assertTrue(PingMeFault.class.isAssignableFrom(faultEx.getClass()));
        PingMeFault nscf = (PingMeFault)faultEx;
        assertNotNull(nscf.getFaultInfo());
        FaultDetail faultInfo = nscf.getFaultInfo();

        assertEquals(faultInfo.getMajor(), (short)2);
        assertEquals(faultInfo.getMinor(), (short)1);
        assertEquals("org.objectweb.hello_world_xml_http.wrapped.PingMeFault: PingMeFault raised by server",
                     nscf.getMessage());
    }

    private String getExceptionString(Exception ex, String faultString) {
        StringBuffer str = new StringBuffer();
        if (ex != null) {
            str.append(ex.getClass().getName());
            str.append(": ");
        }
        str.append(faultString);
       
        if (!ex.getClass().isAnnotationPresent(WebFault.class)) {
            str.append("\n");
            for (StackTraceElement s : ex.getStackTrace()) {
                str.append(s.toString());
                str.append("\n");
            }         
        }
        return str.toString();
    }
}
TOP

Related Classes of org.objectweb.celtix.bus.bindings.xml.XMLBindingImplTest

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.