Package org.springframework.ws.soap.addressing.server

Source Code of org.springframework.ws.soap.addressing.server.AbstractAddressingInterceptorTestCase

/*
* Copyright 2005-2010 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.addressing.server;

import java.net.URI;
import java.util.Iterator;
import java.util.Locale;

import org.springframework.ws.context.DefaultMessageContext;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.soap.SoapHeaderElement;
import org.springframework.ws.soap.SoapMessage;
import org.springframework.ws.soap.addressing.AbstractWsAddressingTestCase;
import org.springframework.ws.soap.addressing.messageid.MessageIdStrategy;
import org.springframework.ws.soap.addressing.version.AddressingVersion;
import org.springframework.ws.soap.saaj.SaajSoapMessage;
import org.springframework.ws.soap.saaj.SaajSoapMessageFactory;
import org.springframework.ws.transport.WebServiceConnection;
import org.springframework.ws.transport.WebServiceMessageSender;

import org.junit.Before;
import org.junit.Test;

import static org.easymock.EasyMock.*;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

public abstract class AbstractAddressingInterceptorTestCase extends AbstractWsAddressingTestCase {

    protected AddressingEndpointInterceptor interceptor;

    protected MessageIdStrategy strategyMock;

    @Before
    public void createMocks() throws Exception {
        strategyMock = createMock(MessageIdStrategy.class);
        expect(strategyMock.isDuplicate(isA(URI.class))).andReturn(false).anyTimes();
        URI replyAction = new URI("urn:replyAction");
        URI faultAction = new URI("urn:faultAction");
        interceptor = new AddressingEndpointInterceptor(getVersion(), strategyMock, new WebServiceMessageSender[0],
                replyAction, faultAction);
    }

    @Test
    public void testUnderstands() throws Exception {
        SaajSoapMessage validRequest = loadSaajMessage(getTestPath() + "/valid.xml");
        Iterator<SoapHeaderElement> iterator = validRequest.getSoapHeader().examineAllHeaderElements();

        replay(strategyMock);

        while (iterator.hasNext()) {
            SoapHeaderElement headerElement = iterator.next();
            assertTrue("Header [" + headerElement.getName() + " not understood",
                    interceptor.understands(headerElement));
        }

        verify(strategyMock);
    }

    @Test
    public void testValidRequest() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/valid.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));

        replay(strategyMock);

        boolean result = interceptor.handleRequest(context, null);
        assertTrue("Valid request not handled", result);
        assertFalse("Message Context has response", context.hasResponse());

        verify(strategyMock);
    }

    @Test
    public void testNoMessageId() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-no-message-id.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));

        replay(strategyMock);

        boolean result = interceptor.handleRequest(context, null);
        assertFalse("Request with no MessageID handled", result);
        assertTrue("Message Context has no response", context.hasResponse());
        SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-no-message-id.xml");
        assertXMLEqual("Invalid response for message with no MessageID", expectedResponse,
                (SaajSoapMessage) context.getResponse());

        verify(strategyMock);
    }

    @Test
    public void testNoReplyTo() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-no-reply-to.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
        URI messageId = new URI("uid:1234");

        expect(strategyMock.newMessageId((SoapMessage) context.getResponse())).andReturn(messageId);
        replay(strategyMock);

        boolean result = interceptor.handleResponse(context, null);
        assertTrue("Request with no ReplyTo not handled", result);
        assertTrue("Message Context has no response", context.hasResponse());
        SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-anonymous.xml");
        assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
                (SaajSoapMessage) context.getResponse());

        verify(strategyMock);
    }

    @Test
    public void testAnonymousReplyTo() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-anonymous.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
        URI messageId = new URI("uid:1234");

        expect(strategyMock.newMessageId((SoapMessage) context.getResponse())).andReturn(messageId);
        replay(strategyMock);

        boolean result = interceptor.handleResponse(context, null);
        assertTrue("Request with anonymous ReplyTo not handled", result);
        SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-anonymous.xml");
        assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
                (SaajSoapMessage) context.getResponse());

        verify(strategyMock);
    }

    @Test
    public void testNoneReplyTo() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-none.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
        replay(strategyMock);
        boolean result = interceptor.handleResponse(context, null);
        assertFalse("None request handled", result);
        assertFalse("Message context has response", context.hasResponse());
        verify(strategyMock);
    }

    @Test
    public void testFaultTo() throws Exception {
        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/request-fault-to.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
        SaajSoapMessage response = (SaajSoapMessage) context.getResponse();
        response.getSoapBody().addServerOrReceiverFault("Error", Locale.ENGLISH);
        URI messageId = new URI("uid:1234");
        expect(strategyMock.newMessageId((SoapMessage) context.getResponse())).andReturn(messageId);
        replay(strategyMock);
        boolean result = interceptor.handleFault(context, null);
        assertTrue("Request with anonymous FaultTo not handled", result);
        SaajSoapMessage expectedResponse = loadSaajMessage(getTestPath() + "/response-fault-to.xml");
        assertXMLEqual("Invalid response for message with invalid MAP", expectedResponse,
                (SaajSoapMessage) context.getResponse());
        verify(strategyMock);
    }

    @Test
    public void testOutOfBandReplyTo() throws Exception {
        WebServiceMessageSender senderMock = createMock(WebServiceMessageSender.class);

        URI replyAction = new URI("urn:replyAction");
        URI faultAction = new URI("urn:replyAction");
        interceptor =
                new AddressingEndpointInterceptor(getVersion(), strategyMock, new WebServiceMessageSender[]{senderMock},
                        replyAction, faultAction);

        WebServiceConnection connectionMock = createMock(WebServiceConnection.class);

        SaajSoapMessage valid = loadSaajMessage(getTestPath() + "/valid.xml");
        MessageContext context = new DefaultMessageContext(valid, new SaajSoapMessageFactory(messageFactory));
        SaajSoapMessage response = (SaajSoapMessage) context.getResponse();

        URI messageId = new URI("uid:1234");
        expect(strategyMock.newMessageId((SoapMessage) context.getResponse())).andReturn(messageId);

        URI uri = new URI("http://example.com/business/client1");
        expect(senderMock.supports(uri)).andReturn(true);
        expect(senderMock.createConnection(uri)).andReturn(connectionMock);
        connectionMock.send(response);
        connectionMock.close();

        replay(strategyMock, senderMock, connectionMock);

        boolean result = interceptor.handleResponse(context, null);
        assertFalse("Out of Band request handled", result);
        assertFalse("Message context has response", context.hasResponse());

        verify(strategyMock, senderMock, connectionMock);
    }

    protected abstract AddressingVersion getVersion();

    protected abstract String getTestPath();

}
TOP

Related Classes of org.springframework.ws.soap.addressing.server.AbstractAddressingInterceptorTestCase

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.