Package org.springframework.ws.server.endpoint.adapter.method

Source Code of org.springframework.ws.server.endpoint.adapter.method.XPathParamMethodArgumentResolverTest

/*
* 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.server.endpoint.adapter.method;

import java.lang.reflect.Method;

import org.springframework.core.MethodParameter;
import org.springframework.ws.MockWebServiceMessage;
import org.springframework.ws.MockWebServiceMessageFactory;
import org.springframework.ws.context.DefaultMessageContext;
import org.springframework.ws.context.MessageContext;
import org.springframework.ws.server.endpoint.annotation.Namespace;
import org.springframework.ws.server.endpoint.annotation.Namespaces;
import org.springframework.ws.server.endpoint.annotation.XPathParam;

import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import static org.junit.Assert.*;

@Namespaces(@Namespace(prefix = "tns", uri = "http://springframework.org/spring-ws"))
public class XPathParamMethodArgumentResolverTest {

    private static final String CONTENTS = "<root><child><text>text</text><number>42</number></child></root>";

    private XPathParamMethodArgumentResolver resolver;

    private MethodParameter booleanParameter;

    private MethodParameter doubleParameter;

    private MethodParameter nodeParameter;

    private MethodParameter nodeListParameter;

    private MethodParameter stringParameter;

    private MethodParameter convertedParameter;

    private MethodParameter unsupportedParameter;

    private MethodParameter namespaceMethodParameter;

    private MethodParameter namespaceClassParameter;

    @Before
    public void setUp() throws Exception {
        resolver = new XPathParamMethodArgumentResolver();
        Method supportedTypes = getClass()
                .getMethod("supportedTypes", Boolean.TYPE, Double.TYPE, Node.class, NodeList.class, String.class);
        booleanParameter = new MethodParameter(supportedTypes, 0);
        doubleParameter = new MethodParameter(supportedTypes, 1);
        nodeParameter = new MethodParameter(supportedTypes, 2);
        nodeListParameter = new MethodParameter(supportedTypes, 3);
        stringParameter = new MethodParameter(supportedTypes, 4);
        convertedParameter = new MethodParameter(getClass().getMethod("convertedType", Integer.TYPE), 0);
        unsupportedParameter = new MethodParameter(getClass().getMethod("unsupported", String.class), 0);
        namespaceMethodParameter = new MethodParameter(getClass().getMethod("namespacesMethod", String.class), 0);
        namespaceClassParameter = new MethodParameter(getClass().getMethod("namespacesClass", String.class), 0);
    }

    @Test
    public void supportsParameter() {
        assertTrue("resolver does not support boolean parameter", resolver.supportsParameter(booleanParameter));
        assertTrue("resolver does not support double parameter", resolver.supportsParameter(doubleParameter));
        assertTrue("resolver does not support Node parameter", resolver.supportsParameter(nodeParameter));
        assertTrue("resolver does not support NodeList parameter", resolver.supportsParameter(nodeListParameter));
        assertTrue("resolver does not support String parameter", resolver.supportsParameter(stringParameter));
        assertTrue("resolver does not support String parameter", resolver.supportsParameter(convertedParameter));
        assertFalse("resolver supports parameter without @XPathParam", resolver.supportsParameter(unsupportedParameter));
    }

    @Test
    public void resolveBoolean() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, booleanParameter);

        assertTrue("resolver does not return boolean", result instanceof Boolean);
        Boolean b = (Boolean) result;
        assertTrue("Invalid boolean value", b);
    }
    @Test
    public void resolveDouble() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, doubleParameter);

        assertTrue("resolver does not return double", result instanceof Double);
        Double d = (Double) result;
        assertEquals("Invalid double value", 42D, d, 0D);
    }

    @Test
    public void resolveNode() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, nodeParameter);

        assertTrue("resolver does not return Node", result instanceof Node);
        Node node  = (Node) result;
        assertEquals("Invalid node value", "child", node.getLocalName());
    }

    @Test
    public void resolveNodeList() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, nodeListParameter);

        assertTrue("resolver does not return NodeList", result instanceof NodeList);
        NodeList nodeList  = (NodeList) result;
        assertEquals("Invalid NodeList value", 1, nodeList.getLength());
        assertEquals("Invalid Node value", "child", nodeList.item(0).getLocalName());
    }

    @Test
    public void resolveString() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, stringParameter);

        assertTrue("resolver does not return String", result instanceof String);
        String s  = (String) result;
        assertEquals("Invalid string value", "text", s);
    }
   
    @Test
    public void resolveConvertedType() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(CONTENTS);
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, convertedParameter);

        assertTrue("resolver does not return String", result instanceof Integer);
        Integer i  = (Integer) result;
        assertEquals("Invalid integer value", new Integer(42), i);
    }

    @Test
    public void resolveNamespacesMethod() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(
                "<root xmlns=\"http://springframework.org/spring-ws\">text</root>");
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, namespaceMethodParameter);

        assertTrue("resolver does not return String", result instanceof String);
        String s  = (String) result;
        assertEquals("Invalid string value", "text", s);
    }
   
    @Test
    public void resolveNamespacesClass() throws Exception {
        MockWebServiceMessage request = new MockWebServiceMessage(
                "<root xmlns=\"http://springframework.org/spring-ws\">text</root>");
        MessageContext messageContext = new DefaultMessageContext(request, new MockWebServiceMessageFactory());

        Object result = resolver.resolveArgument(messageContext, namespaceClassParameter);

        assertTrue("resolver does not return String", result instanceof String);
        String s  = (String) result;
        assertEquals("Invalid string value", "text", s);
    }

    public void unsupported(String s) {
    }

    public void supportedTypes(@XPathParam("/root/child")boolean param1,
                               @XPathParam("/root/child/number")double param2,
                               @XPathParam("/root/child") Node param3,
                               @XPathParam("/root/*") NodeList param4,
                               @XPathParam("/root/child/text")String param5) {
    }

    public void convertedType(@XPathParam("/root/child/number")int param) {
    }

    @Namespaces(@Namespace(prefix = "tns", uri = "http://springframework.org/spring-ws"))
    public void namespacesMethod(@XPathParam("/tns:root")String s) {
    }

    public void namespacesClass(@XPathParam("/tns:root")String s) {
    }

}
TOP

Related Classes of org.springframework.ws.server.endpoint.adapter.method.XPathParamMethodArgumentResolverTest

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.