/* * 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 client.jaxws21.service_dispatch_features.client; import client.common.client.DispatchTestCase; import com.sun.xml.ws.developer.MemberSubmissionEndpointReference; import testutil.ClientServerTestUtil; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBElement; import javax.xml.bind.JAXBException; import javax.xml.namespace.QName; import javax.xml.soap.SOAPMessage; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.dom.DOMResult; import javax.xml.ws.*; import java.net.MalformedURLException; import java.net.URL; import java.io.StringWriter; /** * @author Arun Gupta * Kathy walsh */ public class AddNumbersClient extends DispatchTestCase { //may be used for verification private static final QName SERVICE_QNAME = new QName("http://example.com/", "AddNumbersService"); private static final QName PORT_QNAME = new QName("http://example.com/", "AddNumbersPort"); private static final String ENDPOINT_ADDRESS = "http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello"; //maybe used for firther tests private URL wsdl; public AddNumbersClient(String name) { super(name); try { wsdl = new URL("http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello?WSDL"); } catch (MalformedURLException e) { e.printStackTrace(); } } private Service createServiceWithWSDL() throws Exception { return Service.create(wsdl, SERVICE_QNAME); } private EndpointReference createEPRStubServiceWithWSDL(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(); } private MemberSubmissionEndpointReference createMSEPRStubServiceWithWSDL(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(MemberSubmissionEndpointReference.class); } private EndpointReference createEPRDispatchService(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(); } private MemberSubmissionEndpointReference createMSEPRDispatchService(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(MemberSubmissionEndpointReference.class); } private EndpointReference createEPRSDispatchServiceWithWSDL(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(); } private MemberSubmissionEndpointReference createMSEPRDispatchServiceWithWSDL(Service service) throws Exception { AddNumbersPortType port = service.getPort(PORT_QNAME, AddNumbersPortType.class); return ((BindingProvider) port).getEndpointReference(MemberSubmissionEndpointReference.class); } private Service createService() throws Exception { return Service.create(SERVICE_QNAME); } JAXBContext createJAXBContext() { try { return JAXBContext.newInstance(client.jaxws21.service_dispatch_features.client.ObjectFactory.class); } catch (JAXBException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } return null; } public void testProxyAddNumbers() throws AddNumbersFault_Exception { AddNumbersService service = new AddNumbersService(); AddNumbersPortType port = service.getAddNumbersPort(); int result = port.addNumbers(2, 4); } public void testCreateDispatchSMWsdl() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(false); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); Dispatch<SOAPMessage> dispatch = service.createDispatch(PORT_QNAME, SOAPMessage.class, Service.Mode.MESSAGE, wse); SOAPMessage result = dispatch.invoke(getSOAPMessage(makeStreamSource(SMMsg))); result.writeTo(System.out); } //UsingAddressing wsdl:required=true public void testCreateDispatchSource() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); Dispatch<Source> dispatch = service.createDispatch(PORT_QNAME, Source.class, Service.Mode.PAYLOAD, wse); Source result = dispatch.invoke(makeStreamSource(MSGSrc)); JAXBElement<AddNumbersResponse> addNumberResponse = (JAXBElement<AddNumbersResponse>) createJAXBContext().createUnmarshaller().unmarshal(result); AddNumbersResponse response = addNumberResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } //UsingAddressing wsdl:required=true //RespectBindingFeature Disabled - no effect - behavior undefined by specification //for backward compatability public void testCreateDispatchJAXB() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); Dispatch<Object> dispatch = service.createDispatch(PORT_QNAME, createJAXBContext(), Service.Mode.PAYLOAD, wse); AddNumbers addNumbers = factory.createAddNumbers(); addNumbers.setNumber1(2); addNumbers.setNumber2(4); JAXBElement<AddNumbers> num = factory.createAddNumbers(addNumbers); JAXBElement<AddNumbersResponse> addNumbersResponse = (JAXBElement<AddNumbersResponse>) dispatch.invoke(num); AddNumbersResponse response = addNumbersResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } public void testCreateDispatchSMWsdlWEPR() throws Exception { String eprString = "<EndpointReference xmlns=\"http://www.w3.org/2005/08/addressing\"><Address>" + "http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello</Address>" + "<Metadata><wsaw:ServiceName xmlns:wsaw=\"http://www.w3.org/2006/05/addressing/wsdl\" xmlns:wsns=\"http://example.com/\" EndpointName=\"AddNumbersPort\">wsns:AddNumbersService</wsaw:ServiceName>" + "</Metadata></EndpointReference>"; if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(false); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference w3cEPR = createEPRStubServiceWithWSDL(service); //W3CEPRString = w3cEPR.toString(); W3CEPRString = eprString; Dispatch<SOAPMessage> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(W3CEPRString)), SOAPMessage.class, Service.Mode.MESSAGE); SOAPMessage sm = dispatch.invoke(getSOAPMessage(makeStreamSource(SMMsg))); sm.writeTo(System.out); //System.out.println("Adding numbers 2 and 4"); // int result = dispatch.invoke(getSOAPMessage()) // assert(result == 6); // System.out.println("Addinion of 2 and 4 successful"); } //UsingAddressing wsdl:required=true public void testCreateDispatchSourceWEPR() throws Exception { String eprString = "<EndpointReference xmlns=\"http://www.w3.org/2005/08/addressing\"><Address>" + "http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello</Address>" + "<Metadata><wsaw:ServiceName xmlns:wsaw=\"http://www.w3.org/2006/05/addressing/wsdl\" xmlns:wsns=\"http://example.com/\" EndpointName=\"AddNumbersPort\">wsns:AddNumbersService</wsaw:ServiceName>" + "</Metadata></EndpointReference>"; if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference w3cEPR = createEPRStubServiceWithWSDL(service); //W3CEPRString = w3cEPR.toString(); W3CEPRString = eprString; Dispatch<Source> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(W3CEPRString)), Source.class, Service.Mode.PAYLOAD, wse); Source result = dispatch.invoke(makeStreamSource(MSGSrc)); JAXBElement<AddNumbersResponse> addNumberResponse = (JAXBElement<AddNumbersResponse>) createJAXBContext().createUnmarshaller().unmarshal(result); AddNumbersResponse response = addNumberResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } //UsingAddressing wsdl:required=true //RespectBindingFeature Disabled - no effect - behavior undefined by specification //for backward compatability public void testCreateDispatchJAXBWEPR() throws Exception { String eprString = "<EndpointReference xmlns=\"http://www.w3.org/2005/08/addressing\"><Address>" + "http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello</Address>" + "<Metadata><wsaw:ServiceName xmlns:wsaw=\"http://www.w3.org/2006/05/addressing/wsdl\" xmlns:wsns=\"http://example.com/\" EndpointName=\"AddNumbersPort\">wsns:AddNumbersService</wsaw:ServiceName>" + "</Metadata></EndpointReference>"; if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference w3cEPR = createEPRStubServiceWithWSDL(service); //W3CEPRString = w3cEPR.toString(); W3CEPRString = eprString; Dispatch<Object> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(W3CEPRString)), createJAXBContext(), Service.Mode.PAYLOAD, wse); AddNumbers addNumbers = factory.createAddNumbers(); addNumbers.setNumber1(2); addNumbers.setNumber2(4); JAXBElement<AddNumbers> num = factory.createAddNumbers(addNumbers); JAXBElement<AddNumbersResponse> addNumbersResponse = (JAXBElement<AddNumbersResponse>) dispatch.invoke(num); AddNumbersResponse response = addNumbersResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } public void testCreateDispatchSMWsdlMSEPR() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(false); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); MSEPRString = msEPR.toString(); Dispatch<SOAPMessage> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), SOAPMessage.class, Service.Mode.MESSAGE, wse); SOAPMessage sm = dispatch.invoke(getSOAPMessage(makeStreamSource(SMMsg))); sm.writeTo(System.out); //System.out.println("Adding numbers 2 and 4"); // int result = dispatch.invoke(getSOAPMessage()) // assert(result == 6); // System.out.println("Addinion of 2 and 4 successful"); } //UsingAddressing wsdl:required=true public void testCreateDispatchSourceMSEPR() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); MSEPRString = msEPR.toString(); Dispatch<Source> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), Source.class, Service.Mode.PAYLOAD, wse); Source result = dispatch.invoke(makeStreamSource(MSGSrc)); JAXBElement<AddNumbersResponse> addNumberResponse = (JAXBElement<AddNumbersResponse>) createJAXBContext().createUnmarshaller().unmarshal(result); AddNumbersResponse response = addNumberResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } //UsingAddressing wsdl:required=true //RespectBindingFeature Disabled - no effect - behavior undefined by specification //for backward compatability public void testCreateDispatchJAXBMSEPR() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); EndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); MSEPRString = msEPR.toString(); Dispatch<Object> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), createJAXBContext(), Service.Mode.PAYLOAD, wse); AddNumbers addNumbers = factory.createAddNumbers(); addNumbers.setNumber1(2); addNumbers.setNumber2(4); JAXBElement<AddNumbers> num = factory.createAddNumbers(addNumbers); JAXBElement<AddNumbersResponse> addNumbersResponse = (JAXBElement<AddNumbersResponse>) dispatch.invoke(num); AddNumbersResponse response = addNumbersResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } public void testCreateDispatchSMWsdlMSEPRNoPortQName() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(false); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); MemberSubmissionEndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); msEPR.portTypeName.name = null; MSEPRString = msEPR.toString(); Dispatch<SOAPMessage> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), SOAPMessage.class, Service.Mode.MESSAGE, wse); SOAPMessage sm = dispatch.invoke(getSOAPMessage(makeStreamSource(SMMsg))); sm.writeTo(System.out); //System.out.println("Adding numbers 2 and 4"); // int result = dispatch.invoke(getSOAPMessage()) // assert(result == 6); // System.out.println("Addinion of 2 and 4 successful"); } //UsingAddressing wsdl:required=true public void testCreateDispatchSourceMSEPRNoPortQName() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); MemberSubmissionEndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); //MemberSubmissionEndpointReference.AttributedQName portTypeName = msEPR.portTypeName; //QName portQName = portTypeName.name; msEPR.portTypeName.name = null; MSEPRString = msEPR.toString(); Dispatch<Source> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), Source.class, Service.Mode.PAYLOAD, wse); Source result = dispatch.invoke(makeStreamSource(MSGSrc)); JAXBElement<AddNumbersResponse> addNumberResponse = (JAXBElement<AddNumbersResponse>) createJAXBContext().createUnmarshaller().unmarshal(result); AddNumbersResponse response = addNumberResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } //UsingAddressing wsdl:required=true //RespectBindingFeature Disabled - no effect - behavior undefined by specification //for backward compatability public void testCreateDispatchJAXBMSEPRNoPortQName() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } RespectBindingFeature rbf = new RespectBindingFeature(true); WebServiceFeature[] wse = new WebServiceFeature[]{rbf}; Service service = createServiceWithWSDL(); MemberSubmissionEndpointReference msEPR = createMSEPRStubServiceWithWSDL(service); msEPR.portTypeName.name = null; MSEPRString = msEPR.toString(); Dispatch<Object> dispatch = service.createDispatch(EndpointReference.readFrom(makeStreamSource(MSEPRString)), createJAXBContext(), Service.Mode.PAYLOAD, wse); AddNumbers addNumbers = factory.createAddNumbers(); addNumbers.setNumber1(2); addNumbers.setNumber2(4); JAXBElement<AddNumbers> num = factory.createAddNumbers(addNumbers); JAXBElement<AddNumbersResponse> addNumbersResponse = (JAXBElement<AddNumbersResponse>) dispatch.invoke(num); AddNumbersResponse response = addNumbersResponse.getValue(); assertEquals(response.getReturn(), 2 + 4); } public void xxxtestEPRGetPortIV() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid addressingport created, so exception thrown public void xxxtestEPRGetPortV() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, public void xxxtestEPRGetPortVI() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, so exception thrown public void xxxtestEPRGetPortVII() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, so exception thrown public void xxtestEPRGetPortVIII() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, so exception thrown public void xxxtestEPRGetPortVIIII() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, so exception thrown public void xxxtestEPRGetPortVIIIII() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true //AddressingFeature Disabled expect Exception //Expect no valid port created, so exception thrown public void xxxtestEPRGetPortVIIIIII() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } //UsingAddressing wsdl:required=true public void xxxtestDispatchEPRGetPort() throws Exception { if (ClientServerTestUtil.useLocal()) { System.out.println("HTTP Transport Only Exiting"); return; } } public static String W3CEPRString; public String MSEPRString; private ObjectFactory factory = new ObjectFactory(); private String SMMsg = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Header><To xmlns=\"http://www.w3.org/2005/08/addressing\">http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello</To><Action xmlns=\"http://www.w3.org/2005/08/addressing\">http://example.com/AddNumbersPortType/addNumbersRequest</Action><ReplyTo xmlns=\"http://www.w3.org/2005/08/addressing\">" + "<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>" + "</ReplyTo><MessageID xmlns=\"http://www.w3.org/2005/08/addressing\">uuid:a89abfcf-0b64-4f71-979e-9ee31ae75b6c</MessageID></S:Header><S:Body><addNumbers xmlns=\"http://example.com/\"><number1>2</number1><number2>4</number2></addNumbers></S:Body></S:Envelope>"; private String SMMsgString = "<S:Envelope xmlns:S=\"http://schemas.xmlsoap.org/soap/envelope/\"><S:Header><To xmlns=\"http://www.w3.org/2005/08/addressing\">http://localhost:8080/jaxrpc-client_jaxws21_service_dispatch_features/hello</To><Action xmlns=\"http://www.w3.org/2005/08/addressing\">http://example.com/AddNumbersPortType/addNumbersRequest</Action><ReplyTo xmlns=\"http://www.w3.org/2005/08/addressing\"><Address>http://www.w3.org/2005/08/addressing/anonymous></Address></ReplyTo><MessageID xmlns=\"http://www.w3.org/2005/08/addressing\">uuid:b63b8097-6ac9-4c6e-83f9-ab9f5b108f5c</MessageID></S:Header><S:Body><addNumbers xmlns=\"http://example.com/\"><number1>2</number1><number2>4</number2></addNumbers></S:Body></S:Envelope>"; private String MSGSrc = "<addNumbers xmlns=\"http://example.com/\"><number1>2</number1><number2>4</number2></addNumbers>"; }