Package org.apache.cxf.binding.xml.interceptor

Source Code of org.apache.cxf.binding.xml.interceptor.XMLMessageOutInterceptorTest

/**
* 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.cxf.binding.xml.interceptor;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;

import org.apache.cxf.message.Message;
import org.apache.cxf.service.model.BindingInfo;
import org.apache.cxf.service.model.BindingOperationInfo;
import org.apache.cxf.staxutils.DepthXMLStreamReader;
import org.apache.cxf.staxutils.StaxUtils;
import org.apache.hello_world_xml_http.bare.types.MyComplexStructType;
import org.apache.hello_world_xml_http.wrapped.types.GreetMe;

public class XMLMessageOutInterceptorTest extends TestBase {

    static String bareNs = "http://apache.org/hello_world_xml_http/bare";

    static String wrapNs = "http://apache.org/hello_world_xml_http/wrapped";

    static String bareNsType = "http://apache.org/hello_world_xml_http/bare/types";

    static String wrapNsType = "http://apache.org/hello_world_xml_http/wrapped/types";

    OutputStream outputStream;

    XMLStreamWriter writer;

    XMLMessageOutInterceptor out = new XMLMessageOutInterceptor();

    List<Object> params = new ArrayList<Object>();

    QName bareMyComplexStructTypeQName = new QName(bareNs, "in");

    QName bareMyComplexStructQName = new QName(bareNsType, "myComplexStruct");

    QName bareRequestTypeQName = new QName(bareNsType, "requestType");

    QName wrapGreetMeQName = new QName(wrapNsType, "greetMe");

    QName wrapRequestTypeQName = new QName(wrapNsType, "requestType");

    public void setUp() throws Exception {
        super.setUp();
        out.setPhase("phase1");
        chain.add(out);
        prepareMessage(params);
    }
  
    public void testBareOutSingle() throws Exception {

        MyComplexStructType myComplexStruct = new MyComplexStructType();
        myComplexStruct.setElem1("elem1");
        myComplexStruct.setElem2("elem2");
        myComplexStruct.setElem3(45);
        params.add(myComplexStruct);

        common("/wsdl/hello_world_xml_bare.wsdl", new QName(bareNs, "XMLPort"),
                        MyComplexStructType.class);

        BindingInfo bi = super.serviceInfo.getBinding(new QName(bareNs, "Greeter_XMLBinding"));
        BindingOperationInfo boi = bi.getOperation(new QName(bareNs, "sendReceiveData"));
        xmlMessage.getExchange().put(BindingOperationInfo.class, boi);

        out.handleMessage(xmlMessage);

        XMLStreamReader reader = getXMLReader();
        DepthXMLStreamReader dxr = new DepthXMLStreamReader(reader);
        StaxUtils.nextEvent(dxr);
        StaxUtils.toNextElement(dxr);
       
        assertEquals(bareMyComplexStructTypeQName.getLocalPart(), dxr.getLocalName());
        StaxUtils.toNextElement(dxr);
        StaxUtils.toNextText(dxr);
        assertEquals(myComplexStruct.getElem1(), dxr.getText());
    }

    public void testBareOutMultiWithRoot() throws Exception {

        MyComplexStructType myComplexStruct = new MyComplexStructType();
        myComplexStruct.setElem1("elem1");
        myComplexStruct.setElem2("elem2");
        myComplexStruct.setElem3(45);
        params.add(myComplexStruct);
        params.add("tli");

        common("/wsdl/hello_world_xml_bare.wsdl", new QName(bareNs, "XMLPort"),
                        MyComplexStructType.class);

        BindingInfo bi = super.serviceInfo.getBinding(new QName(bareNs, "Greeter_XMLBinding"));
        BindingOperationInfo boi = bi.getOperation(new QName(bareNs, "testMultiParamPart"));
        xmlMessage.getExchange().put(BindingOperationInfo.class, boi);

        out.handleMessage(xmlMessage);

        XMLStreamReader reader = getXMLReader();
        DepthXMLStreamReader dxr = new DepthXMLStreamReader(reader);
        StaxUtils.nextEvent(dxr);
        StaxUtils.toNextElement(dxr);

        assertEquals(bareNs, dxr.getNamespaceURI());
        assertEquals("multiParamRootReq", dxr.getLocalName());
        StaxUtils.nextEvent(dxr);
        StaxUtils.toNextElement(dxr);
       
        assertEquals(bareMyComplexStructQName.getNamespaceURI(), dxr.getNamespaceURI());
        assertEquals("myComplexStruct", dxr.getLocalName());
        boolean foundRequest = false;
        while (true) {
            StaxUtils.nextEvent(dxr);
            StaxUtils.toNextElement(dxr);
            QName requestType = new QName(dxr.getNamespaceURI(), dxr.getLocalName());
            if (requestType.equals(bareRequestTypeQName)) {
                foundRequest = true;
                break;
            }
        }
        assertEquals("found request type", true, foundRequest);
        StaxUtils.nextEvent(dxr);
        if (StaxUtils.toNextText(dxr)) {
            assertEquals("tli", dxr.getText());
        }
    }

    public void testWrapOut() throws Exception {
        GreetMe greetMe = new GreetMe();
        greetMe.setRequestType("tli");
        params.add(greetMe);
        common("/wsdl/hello_world_xml_wrapped.wsdl", new QName(wrapNs, "XMLPort"), GreetMe.class);

        BindingInfo bi = super.serviceInfo.getBinding(new QName(wrapNs, "Greeter_XMLBinding"));
        BindingOperationInfo boi = bi.getOperation(new QName(wrapNs, "greetMe"));
        xmlMessage.getExchange().put(BindingOperationInfo.class, boi);

        out.handleMessage(xmlMessage);

        XMLStreamReader reader = getXMLReader();
        DepthXMLStreamReader dxr = new DepthXMLStreamReader(reader);
        StaxUtils.nextEvent(dxr);
        StaxUtils.toNextElement(dxr);
        assertEquals(wrapGreetMeQName.getNamespaceURI(), dxr.getNamespaceURI());
        assertEquals(wrapGreetMeQName.getLocalPart(), dxr.getLocalName());
        StaxUtils.toNextElement(dxr);
        StaxUtils.toNextText(dxr);
        assertEquals(greetMe.getRequestType(), dxr.getText());
    }

    private void prepareMessage(List paramsList) throws Exception {
        outputStream = new ByteArrayOutputStream();
        // all test case here use input message to do test,
        // that means the out interceptor's role is Server-Out
        xmlMessage.put(Message.REQUESTOR_ROLE, Boolean.TRUE);
        xmlMessage.setContent(OutputStream.class, outputStream);
        writer = StaxUtils.createXMLStreamWriter(outputStream);
        xmlMessage.setContent(XMLStreamWriter.class, writer);
        xmlMessage.setContent(List.class, paramsList);
    }

    private XMLStreamReader getXMLReader() throws Exception {
        ByteArrayOutputStream o = (ByteArrayOutputStream) xmlMessage.getContent(OutputStream.class);
        writer.flush();       
        InputStream in = new ByteArrayInputStream(o.toByteArray());
        return StaxUtils.createXMLStreamReader(in);
    }
}
TOP

Related Classes of org.apache.cxf.binding.xml.interceptor.XMLMessageOutInterceptorTest

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.