/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2004-2013 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * http://glassfish.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package fromwsdl.wsdl_hello_lit.client; import javax.xml.ws.soap.SOAPFaultException; import junit.framework.TestCase; import testutil.ClientServerTestUtil; import javax.xml.namespace.QName; import javax.xml.ws.BindingProvider; import javax.xml.ws.ProtocolException; import javax.xml.ws.Service; import javax.xml.ws.Holder; import javax.xml.ws.handler.Handler; import javax.xml.ws.handler.MessageContext; import javax.xml.ws.handler.soap.SOAPMessageContext; import javax.xml.ws.handler.soap.SOAPHandler; import javax.xml.ws.soap.SOAPFaultException; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.Set; import fromwsdl.wsdl_hello_lit.client.handlers.MUHelperHandler; /** * @author JAX-RPC RI Development Team */ public class HelloLiteralTest extends TestCase { // main method added for debugging public static void main(String [] args) { try { System.setProperty("uselocal", "true"); HelloLiteralTest test = new HelloLiteralTest("HelloLiteralTest"); test.testHello(); } catch (Exception e) { e.printStackTrace(); } } private static Hello stub; public HelloLiteralTest(String name) throws Exception { super(name); Hello_Service service = new Hello_Service(); stub = service.getHelloPort(); ClientServerTestUtil.setTransport(stub); } public void testHello() throws Exception { try { String arg = "foo"; String extra = "bar"; Hello_Type req = new Hello_Type(); req.setArgument(arg); req.setExtra(extra); HelloResponse response = stub.hello(req); assertEquals(arg, response.getArgument()); assertEquals(extra, response.getExtra()); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } public void testKeyword(){ String req = "Hello"; List<Handler> handlerchain = new ArrayList<Handler>(); handlerchain.add(new MyHandler()); ((BindingProvider) stub).getBinding().setHandlerChain(handlerchain); ((BindingProvider) stub).getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE); ((BindingProvider) stub).getRequestContext().put(BindingProvider.SOAPACTION_URI_PROPERTY,"urn:test:hello_mod"); String resp = stub.testKeyword(req); assertTrue(resp.equals("Hello World!")); } class MyHandler implements SOAPHandler<SOAPMessageContext> { public boolean handleMessage(SOAPMessageContext context) { if (context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY).equals( Boolean.TRUE)) { if (!(context.get(BindingProvider.SOAPACTION_URI_PROPERTY).equals("urn:test:hello_mod"))) { throw new RuntimeException("SOAPAction not set as expected"); } } return true; } public boolean handleFault(SOAPMessageContext context) { return true; } public void close(MessageContext context) {} public Set<QName> getHeaders() { return null; } } public void testVoid() throws Exception { try { VoidType req = new VoidType(); VoidType response = stub.voidTest(req); assertNotNull(response); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } public void testEchoArray() throws Exception{ try{ String[] in = {"JAXRPC 1.0", "JAXRPC 1.1", "JAXRPC 1.1.2", "JAXRPC 2.0"}; NameType nt = new NameType(); nt.getName().add(in[0]); nt.getName().add(in[1]); nt.getName().add(in[2]); nt.getName().add(in[3]); javax.xml.ws.Holder<NameType> req = new javax.xml.ws.Holder<NameType>(nt); stub.echoArray(req); System.out.println("Here we are"); assertTrue(req.value == null); }catch(Exception e){ e.printStackTrace(); assertTrue(false); } } public void testEchoArray1() throws Exception{ try{ String[] in = {"JAXRPC 1.0", "JAXRPC 1.1", "JAXRPC 1.1.2", "JAXRPC 2.0", "EA"}; NameType nt = new NameType(); nt.getName().add(in[0]); nt.getName().add(in[1]); nt.getName().add(in[2]); nt.getName().add(in[3]); javax.xml.ws.Holder<NameType> req = new javax.xml.ws.Holder<NameType>(nt); stub.echoArray1(req); assertTrue(java.util.Arrays.equals(in, req.value.getName().toArray())); }catch(Exception e){ e.printStackTrace(); assertTrue(false); } } public void testEchoArray2c() throws Exception { try { javax.xml.ws.Holder<NameType> req = new javax.xml.ws.Holder<NameType>(); stub.echoArray2(req); assertTrue(req.value == null); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } public void testEchoArray3() throws Exception { try { java.util.List<String> in = new ArrayList<String>(); in.add("JAXRPC 1.0"); in.add("JAXRPC 1.1"); in.add("JAXRPC 1.1.2"); in.add("JAXRPC 2.0"); javax.xml.ws.Holder<java.util.List<String>> req = new javax.xml.ws.Holder<java.util.List<String>>(in); stub.echoArray3(req); assertTrue(in.equals(req.value)); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } public void testEchoArray4() throws Exception { try { NameType1 resp = stub.echoArray4(new NameType1()); assertEquals(resp.getName().get(0).getArgument(), "arg1"); assertEquals(resp.getName().get(0).getExtra(), "extra1"); assertEquals(resp.getName().get(1).getArgument(), "arg2"); assertEquals(resp.getName().get(1).getExtra(), "extra2"); } catch (Exception e) { e.printStackTrace(); assertTrue(false); } } /* * MU test here for soap 1.1. Test uses a simple handler * on client side to test service with no handlers. */ public void testMustUnderstand1() throws Exception { String next_1_1 = "http://schemas.xmlsoap.org/soap/actor/next"; try { // clear handlers (should be none) and add helper handler ClientServerTestUtil.clearHandlers((BindingProvider) stub); MUHelperHandler handler = new MUHelperHandler(); ClientServerTestUtil.addHandlerToBinding(handler, (BindingProvider) stub); // have handler set header that is ignored handler.setMUHeader(new QName("urn:mutest", "someheader"), "notarealactor"); // make the call String arg = "foo"; Hello_Type req = new Hello_Type(); req.setArgument(arg); HelloResponse response = stub.hello(req); assertEquals(arg, response.getArgument()); // add header that should result in soap fault handler.setMUHeader(new QName("urn:mutest", "someheader"), next_1_1); // make the call try { response = stub.hello(req); fail("did not receive any exception"); } catch (ProtocolException e) { if (e instanceof SOAPFaultException) { // pass } else { fail("did not receive soap fault, received: " + e.toString()); } } catch (Exception e) { fail("did not receive protocol exception. received " + e.toString()); } } finally { // always clear the handlers ClientServerTestUtil.clearHandlers((BindingProvider) stub); } } }