/* * 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.axis2.jaxws.sample; import junit.framework.Test; import junit.framework.TestSuite; import org.apache.axis2.jaxws.TestLogger; import org.apache.axis2.jaxws.framework.AbstractTestCase; import org.apache.axis2.jaxws.sample.dlwmin.sei.Greeter; import org.apache.axis2.jaxws.sample.dlwmin.sei.TestException; import org.apache.axis2.jaxws.sample.dlwmin.sei.TestException2; import org.apache.axis2.jaxws.sample.dlwmin.sei.TestException3; import org.apache.axis2.jaxws.sample.dlwmin.types.TestBean; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.Dispatch; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; /** * * Tests to verify Document/Literal Wrapped Minimal Scenarios * Document/Literal Wrapped is a JAX-WS style. * "Minimal" indicates that no wrapper beans are associated with the JAX-WS method. * In most enterprise scenarios, wrapper beans are packaged with the JAX-WS application. */ public class DLWMinTests extends AbstractTestCase { private static final String NAMESPACE = "http://apache.org/axis2/jaxws/sample/dlwmin"; private static final QName QNAME_SERVICE = new QName( NAMESPACE, "GreeterService"); private static final QName QNAME_PORT = new QName( NAMESPACE, "GreeterPort"); private static final String URL_ENDPOINT = "http://localhost:6060/axis2/services/GreeterService.GreeterImplPort"; public static Test suite() { return getTestSetup(new TestSuite(DLWMinTests.class)); } private Greeter getProxy(String action) { Service service = Service.create(QNAME_SERVICE); Greeter proxy = service.getPort(QNAME_PORT, Greeter.class); BindingProvider p = (BindingProvider) proxy; p.getRequestContext().put( BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); p.getRequestContext().put( BindingProvider.SOAPACTION_URI_PROPERTY, action); p.getRequestContext().put( BindingProvider.ENDPOINT_ADDRESS_PROPERTY, URL_ENDPOINT); return proxy; } private Dispatch<String> getDispatch(String action) { // Get a dispatch Service svc = Service.create(QNAME_SERVICE); svc.addPort(QNAME_PORT, null, URL_ENDPOINT); Dispatch<String> dispatch = svc.createDispatch(QNAME_PORT, String.class, Service.Mode.PAYLOAD); BindingProvider p = (BindingProvider) dispatch; p.getRequestContext().put( BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); p.getRequestContext().put( BindingProvider.SOAPACTION_URI_PROPERTY, action); return dispatch; } /** * Test simple greetMe method * with style doc/lit wrapped without the presence of wrapper classes. */ public void testGreetMe() { Greeter proxy = getProxy("greetMe"); String me = "Scheu"; String response = proxy.greetMe(me); assertTrue("Hello Scheu".equals(response)); // Try the call again response = proxy.greetMe(me); assertTrue("Hello Scheu".equals(response)); } /** * Test simple greetMe method * with style doc/lit wrapped without the presence of wrapper classes. * Passing a null input and receiving a null return */ public void testGreetMe_Null() { Greeter proxy = getProxy("greetMe"); String me = null; String response = proxy.greetMe(me); assertTrue("Expected null but received " + response, response == null); // Try the call again response = proxy.greetMe(me); assertTrue("Expected null but received " + response, response == null); } /** * Test simple greetMe method with dispatch * with style doc/lit wrapped without the presence of wrapper classes. */ public void testGreetMe_Dispatch() { Dispatch<String> dispatch = getDispatch("greetMe"); String request = "<pre:greetMe xmlns:pre='http://apache.org/axis2/jaxws/sample/dlwmin'>" + "<pre:requestType>Scheu</pre:requestType>" + "</pre:greetMe>"; TestLogger.logger.debug("Doc/Lit Wrapped Minimal Request =" + request); String response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("Hello Scheu")); assertTrue(response.contains("dlwmin:greetMeResponse")); assertTrue(response.contains(":responseType") || response.contains("responseType xmlns=")); // assert that response type is a qualified element assertTrue(!response.contains("xsi:type")); // xsi:type should not be used // Try the call again response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("Hello Scheu")); assertTrue(response.contains("dlwmin:greetMeResponse")); assertTrue(response.contains(":responseType") || response.contains("responseType xmlns=")); // assert that response type is a qualified element assertTrue(!response.contains("xsi:type")); // xsi:type should not be used } /** * Test simpleTest method * with style doc/lit wrapped without the presence of wrapper classes. */ public void testSimpleTest() { Greeter proxy = getProxy("simpleTest"); String name = "user1"; byte[] bytes = new byte[5]; for (int i=0; i< bytes.length; i++) { bytes[i] = (byte) i; } String response = proxy.simpleTest(name, bytes); System.out.println(response); assertTrue(response.contains("name=user1")); assertTrue(response.contains("numbytes=5")); // Try the call again response = proxy.simpleTest(name, bytes); System.out.println(response); assertTrue(response.contains("name=user1")); assertTrue(response.contains("numbytes=5")); } /** * Test simpleTest method * with style doc/lit wrapped without the presence of wrapper classes. */ public void testSimpleTestNoName() { Greeter proxy = getProxy("simpleTest"); // Try with a no name String name = null; byte[] bytes = new byte[100]; String response = proxy.simpleTest(name, bytes); System.out.println(response); assertTrue(response.contains("name=null")); assertTrue(response.contains("numbytes=100")); // Try the call again response = proxy.simpleTest(name, bytes); System.out.println(response); assertTrue(response.contains("name=null")); assertTrue(response.contains("numbytes=100")); } /** * Test simpleTest method with dispatch * with style doc/lit wrapped without the presence of wrapper classes. */ public void testSimple_Dispatch() { Dispatch<String> dispatch = getDispatch("simpleTest"); String request = "<pre:simpleTest xmlns:pre='http://apache.org/axis2/jaxws/sample/dlwmin'>" + "<pre:name>user1</pre:name>" + "<pre:bytes>010203</pre:bytes>" + "</pre:simpleTest>"; TestLogger.logger.debug("Doc/Lit Wrapped Minimal Request =" + request); String response = dispatch.invoke(request); System.out.println(response); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("name=user1")); assertTrue(response.contains("numbytes=3")); assertTrue(response.contains("dlwmin:simpleTestResponse")); // Try the call again response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); System.out.println(response); assertTrue(response.contains("name=user1")); assertTrue(response.contains("numbytes=3")); assertTrue(response.contains("dlwmin:simpleTestResponse")); } /** * Test simpleTest method with dispatch * with style doc/lit wrapped without the presence of wrapper classes. */ public void testSimpleNoName_Dispatch() { Dispatch<String> dispatch = getDispatch("simpleTest"); String request = "<pre:simpleTest xmlns:pre='http://apache.org/axis2/jaxws/sample/dlwmin'>" + "<pre:bytes>010203</pre:bytes>" + "</pre:simpleTest>"; TestLogger.logger.debug("Doc/Lit Wrapped Minimal Request =" + request); String response = dispatch.invoke(request); System.out.println(response); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("name=null")); assertTrue(response.contains("numbytes=3")); assertTrue(response.contains("dlwmin:simpleTestResponse")); // Try the call again response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); System.out.println(response); assertTrue(response.contains("name=null")); assertTrue(response.contains("numbytes=3")); assertTrue(response.contains("dlwmin:simpleTestResponse")); } /** * Test simpleUnqualified method * with style doc/lit wrapped without the presence of wrapper classes. */ public void testUnqualified() { Greeter proxy = getProxy("testUnqualified"); String request = "hello world"; String response = proxy.testUnqualified(request); assertTrue("hello world".equals(response)); // Try the call again response = proxy.testUnqualified(request); assertTrue("hello world".equals(response)); } /** * Test simpleUnqualified method with dispatch * with style doc/lit wrapped without the presence of wrapper classes. */ public void testUnqualified_Dispatch() { Dispatch<String> dispatch = getDispatch("testUnqualified"); String request = "<pre:unqualifiedTestResponse xmlns:pre='http://apache.org/axis2/jaxws/sample/dlwmin'>" + "<unqualifiedRequest>hello world</unqualifiedRequest>" + "</pre:unqualifiedTestResponse>"; TestLogger.logger.debug("Doc/Lit Wrapped Minimal Request =" + request); String response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("hello world")); assertTrue(response.contains("dlwmin:testUnqualifiedResponse")); assertTrue(response.contains("<unqualifiedResponse")); // assert that the child element is an uqualified element assertTrue(!response.contains("xsi:type")); // xsi:type should not be used // Try the call again to verify response = dispatch.invoke(request); TestLogger.logger.debug("Doc/Lit Wrapped Minimal Response =" + response); assertTrue(response.contains("hello world")); assertTrue(response.contains("dlwmin:testUnqualifiedResponse")); assertTrue(response.contains("<unqualifiedResponse")); // assert that the child element is an uqualified element assertTrue(!response.contains("xsi:type")); // xsi:type should not be used } /** * Test echo with complexType */ public void testProcess_Echo() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); TestBean response = proxy.process(0, request); assertTrue(response != null); assertTrue(response.getData1().equals("hello world")); assertTrue(response.getData2() == 10); // Try the call again to verify response = proxy.process(0, request); assertTrue(response != null); assertTrue(response.getData1().equals("hello world")); assertTrue(response.getData2() == 10); } /** * Test throwing checked exception w/o a JAXB Bean */ public void testProcess_CheckException() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); try { TestBean response = proxy.process(1, request); fail("Expected TestException thrown"); } catch (WebServiceException wse) { // Currently there is no support if the fault bean is missing assertTrue(wse.getMessage().contains("User fault processing is not supported")); } catch (TestException te) { assertTrue(te.getMessage().equals("TestException thrown")); assertTrue(te.getFlag() == 123); } catch (Exception e) { fail("Expected TestException thrown but found " + e.getClass()); } // Try the call again to verify try { TestBean response = proxy.process(1, request); fail("Expected TestException thrown"); } catch (WebServiceException wse) { // Currently there is no support if the fault bean is missing assertTrue(wse.getMessage().contains("User fault processing is not supported")); } catch (TestException te) { assertTrue(te.getMessage().equals("TestException thrown")); assertTrue(te.getFlag() == 123); } catch (Exception e) { fail("Expected TestException thrown but found " + e.getClass()); } } /** * Test throwing checked exception that has a JAXB Bean */ public void testProcess_CheckException2() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); try { TestBean response = proxy.process(4, request); fail("Expected TestException2 thrown"); } catch (TestException2 te) { assertTrue(te.getMessage().equals("TestException2 thrown")); assertTrue(te.getFlag() == 456); } catch (Exception e) { fail("Expected TestException2 thrown but found " + e.getClass()); } // Try the call again to verify the same behavior try { TestBean response = proxy.process(4, request); fail("Expected TestException2 thrown"); } catch (TestException2 te) { assertTrue(te.getMessage().equals("TestException2 thrown")); assertTrue(te.getFlag() == 456); } catch (Exception e) { fail("Expected TestException2 thrown but found " + e.getClass()); } } /** * Test throwing checked exception that is a compliant JAXWS exception */ public void testProcess_CheckException3() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); try { TestBean response = proxy.process(5, request); fail("Expected TestException3 thrown"); } catch (TestException3 te) { assertTrue(te.getMessage().equals("TestException3 thrown")); assertTrue(te.getFaultInfo().getFlag() == 789); } catch (Exception e) { fail("Expected TestException3 thrown but found " + e.getClass()); } // Try the call again to verify the same behavior try { TestBean response = proxy.process(5, request); fail("Expected TestException3 thrown"); } catch (TestException3 te) { assertTrue(te.getMessage().equals("TestException3 thrown")); assertTrue(te.getFaultInfo().getFlag() == 789); } catch (Exception e) { fail("Expected TestException3 thrown but found " + e.getClass()); } } /** * Test throwing WebServiceException */ public void testProcess_WebServiceException() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); try { TestBean response = proxy.process(2, request); fail("Expected WebServiceException thrown"); } catch (WebServiceException wse) { assertTrue(wse.getMessage().equals("WebServiceException thrown")); } catch (Exception e) { fail("Expected WebServiceException thrown but found " + e.getClass()); } // Try the call again to verify the same behavior try { TestBean response = proxy.process(2, request); fail("Expected WebServiceException thrown"); } catch (WebServiceException wse) { assertTrue(wse.getMessage().equals("WebServiceException thrown")); } catch (Exception e) { fail("Expected WebServiceException thrown but found " + e.getClass()); } } /** * Test throwing NPE */ public void testProcess_NPE() throws Exception { Greeter proxy = getProxy("process"); TestBean request = new TestBean(); request.setData1("hello world"); request.setData2(10); try { TestBean response = proxy.process(3, request); fail("Expected NullPointerException thrown"); } catch (WebServiceException wse) { assertTrue(wse.getMessage().equals("NPE thrown")); } catch (Exception e) { fail("Expected NullPointerException thrown but found " + e.getClass()); } // Try the call again to verify the same behavior try { TestBean response = proxy.process(3, request); fail("Expected NullPointerException thrown"); } catch (WebServiceException wse) { assertTrue(wse.getMessage().equals("NPE thrown")); } catch (Exception e) { fail("Expected NullPointerException thrown but found " + e.getClass()); } } }