Package org.springframework.ws.soap.axiom

Source Code of org.springframework.ws.soap.axiom.AxiomSoap11MessageFactoryTest

/*
* Copyright 2005-2012 the original author or authors.
*
* Licensed 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.springframework.ws.soap.axiom;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;

import org.springframework.ws.InvalidXmlException;
import org.springframework.ws.WebServiceMessage;
import org.springframework.ws.WebServiceMessageFactory;
import org.springframework.ws.soap.soap11.AbstractSoap11MessageFactoryTestCase;
import org.springframework.ws.transport.MockTransportInputStream;
import org.springframework.ws.transport.TransportInputStream;
import org.springframework.xml.transform.StringResult;

import org.custommonkey.xmlunit.XMLAssert;
import org.custommonkey.xmlunit.XMLUnit;
import org.junit.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;

public class AxiomSoap11MessageFactoryTest extends AbstractSoap11MessageFactoryTestCase {

    private Transformer transformer;

    @Override
    protected WebServiceMessageFactory createMessageFactory() throws Exception {
        transformer = TransformerFactory.newInstance().newTransformer();

        AxiomSoapMessageFactory factory = new AxiomSoapMessageFactory();
        factory.afterPropertiesSet();
        return factory;
    }

    @Override
    public void testCreateSoapMessageIllFormedXml() throws Exception {
        // Axiom parses the contents of XML lazily, so it will not throw an InvalidXmlException when a message is parsed
        throw new InvalidXmlException(null, null);
    }

    @Test
    public void testGetCharsetEncoding() {
        AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory();

        assertEquals("Invalid charset", "utf-8", messageFactory.getCharSetEncoding("text/html; charset=utf-8"));
        assertEquals("Invalid charset", "utf-8", messageFactory.getCharSetEncoding("application/xop+xml;type=text/xml; charset=utf-8"));
        assertEquals("Invalid charset", "utf-8", messageFactory.getCharSetEncoding("application/xop+xml;type=\"text/xml; charset=utf-8\""));
    }

    @Test
    public void testRepetitiveReadCaching() throws Exception {
        AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory();
        messageFactory.setPayloadCaching(true);
        messageFactory.afterPropertiesSet();

        String xml = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body>" +
                "<root xmlns='http://springframework.org/spring-ws'><child /></root>" +
                "</soapenv:Body></soapenv:Envelope>";
        TransportInputStream tis = new MockTransportInputStream(new ByteArrayInputStream(xml.getBytes()));
        WebServiceMessage message = messageFactory.createWebServiceMessage(tis);

        StringResult result = new StringResult();
        transformer.transform(message.getPayloadSource(), result);
        transformer.transform(message.getPayloadSource(), result);
    }

    @Test
    public void testRepetitiveReadNoCaching() throws Exception {
        AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory();
        messageFactory.setPayloadCaching(false);
        messageFactory.afterPropertiesSet();

        String xml = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'><soapenv:Body>" +
                "<root xmlns='http://springframework.org/spring-ws'><child /></root>" +
                "</soapenv:Body></soapenv:Envelope>";
        TransportInputStream tis = new MockTransportInputStream(new ByteArrayInputStream(xml.getBytes()));
        WebServiceMessage message = messageFactory.createWebServiceMessage(tis);

        StringResult result = new StringResult();
        transformer.transform(message.getPayloadSource(), result);
        try {
            transformer.transform(message.getPayloadSource(), result);
            fail("TransformerException expected");
        }
        catch (TransformerException expected) {
            // ignore
        }
    }

    /**
     * See http://jira.springframework.org/browse/SWS-502
     */
    @Test
    public void testSWS502() throws Exception {
        AxiomSoapMessageFactory messageFactory = new AxiomSoapMessageFactory();
        messageFactory.setPayloadCaching(false);
        messageFactory.afterPropertiesSet();

        String envelope =
                "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><soapenv:Body>" +
                        "<ns1:sendMessageResponse xmlns:ns1='urn:Sole' soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>" +
                        "<sendMessageReturn xsi:type='soapenc:string' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'>" +
                        "<![CDATA[<?xml version='1.0' encoding='UTF-8'?>" + "<PDresponse>" +
                        "<isStatusOK>true</isStatusOK>" + "<status>0</status>" +
                        "<payLoad><![CDATA[<?xml version='1.0' encoding='UTF-8'?><response>ok</response>]]]]>><![CDATA[</payLoad>" +
                        "</PDresponse>]]></sendMessageReturn>" + "</ns1:sendMessageResponse>" +
                        "</soapenv:Body></soapenv:Envelope>";

        InputStream inputStream = new ByteArrayInputStream(envelope.getBytes("UTF-8"));
        AxiomSoapMessage message = messageFactory.createWebServiceMessage(new MockTransportInputStream(inputStream));

        StringResult result = new StringResult();
        transformer.transform(message.getPayloadSource(), result);

        XMLUnit.setIgnoreWhitespace(true);
        String expectedPayload =
                "<ns1:sendMessageResponse xmlns:ns1='urn:Sole' xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' soapenv:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'>" +
                        "<sendMessageReturn xsi:type='soapenc:string' xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'>" +
                        "<![CDATA[<?xml version='1.0' encoding='UTF-8'?>" + "<PDresponse>" +
                        "<isStatusOK>true</isStatusOK>" + "<status>0</status>" +
                        "<payLoad><![CDATA[<?xml version='1.0' encoding='UTF-8'?><response>ok</response>]]]]>><![CDATA[</payLoad>" +
                        "</PDresponse>]]></sendMessageReturn>" + "</ns1:sendMessageResponse>";
        XMLAssert.assertXMLEqual(expectedPayload, result.toString());

    }

}
TOP

Related Classes of org.springframework.ws.soap.axiom.AxiomSoap11MessageFactoryTest

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.