You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ba...@apache.org on 2010/04/30 21:12:58 UTC
svn commit: r939784 - in /axis/axis2/java/core/trunk/modules/jaxws:
src/org/apache/axis2/jaxws/addressing/util/ src/org/apache/axis2/jaxws/spi/
test-resources/wsdl/ test/org/apache/axis2/jaxws/spi/
Author: barrettj
Date: Fri Apr 30 19:12:58 2010
New Revision: 939784
URL: http://svn.apache.org/viewvc?rev=939784&view=rev
Log:
AXIS2-4699, patch submitted by Katherine Sanders. Add new Provider.createW3CEndpointReference method for JAXWS 2.2.
Added:
axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Echo.wsdl
axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Invalid.wsdl
axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ProviderTests.java
Modified:
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/addressing/util/EndpointReferenceUtils.java
axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/Provider.java
Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/addressing/util/EndpointReferenceUtils.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/addressing/util/EndpointReferenceUtils.java?rev=939784&r1=939783&r2=939784&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/addressing/util/EndpointReferenceUtils.java (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/addressing/util/EndpointReferenceUtils.java Fri Apr 30 19:12:58 2010
@@ -22,6 +22,7 @@ package org.apache.axis2.jaxws.addressin
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.addressing.EndpointReferenceHelper;
import org.apache.axis2.addressing.metadata.InterfaceName;
@@ -39,6 +40,8 @@ import javax.xml.transform.stream.Stream
import javax.xml.transform.stream.StreamSource;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.util.List;
+import java.util.Map;
public final class EndpointReferenceUtils {
@@ -164,6 +167,34 @@ public final class EndpointReferenceUtil
/**
*
* @param axis2EPR
+ * @param elements
+ * @throws Exception
+ */
+ public static void addExtensibleElements(EndpointReference axis2EPR, Element... elements)
+ throws Exception {
+ if (elements != null) {
+ for (Element element : elements) {
+ OMElement omElement = XMLUtils.toOM(element);
+ axis2EPR.addExtensibleElement(omElement);
+ }
+ }
+ }
+
+ public static void addExtensibleAttributes(EndpointReference axis2EPR, Map<QName, String> attributes)
+ throws Exception {
+ if (attributes != null) {
+ OMFactory fac = OMAbstractFactory.getOMFactory();
+ for (Map.Entry<QName, String> attribute : attributes.entrySet()) {
+ QName qName = attribute.getKey();
+ OMNamespace omNamespace = fac.createOMNamespace(qName.getNamespaceURI(), qName.getPrefix());
+ axis2EPR.addAttribute(qName.getLocalPart(), omNamespace, attribute.getValue());
+ }
+ }
+ }
+
+ /**
+ *
+ * @param axis2EPR
* @param metadata
* @throws Exception
*/
Modified: axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/Provider.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/Provider.java?rev=939784&r1=939783&r2=939784&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/Provider.java (original)
+++ axis/axis2/java/core/trunk/modules/jaxws/src/org/apache/axis2/jaxws/spi/Provider.java Fri Apr 30 19:12:58 2010
@@ -40,6 +40,7 @@ import javax.xml.ws.spi.ServiceDelegate;
import javax.xml.ws.wsaddressing.W3CEndpointReference;
import java.net.URL;
import java.util.List;
+import java.util.Map;
public class Provider extends javax.xml.ws.spi.Provider {
private static final Log log = LogFactory.getLog(Provider.class);
@@ -114,6 +115,51 @@ public class Provider extends javax.xml.
return w3cEPR;
}
+
+ @Override
+ public W3CEndpointReference createW3CEndpointReference(String address,
+ QName interfaceName,
+ QName serviceName,
+ QName portName,
+ List<Element> metadata,
+ String wsdlDocumentLocation,
+ List<Element> referenceParameters,
+ List<Element> elements,
+ Map<QName, String> attributes) {
+ String addressingNamespace =
+ EndpointReferenceUtils.getAddressingNamespace(W3CEndpointReference.class);
+ org.apache.axis2.addressing.EndpointReference axis2EPR =
+ EndpointReferenceUtils.createAxis2EndpointReference(address, serviceName, portName, wsdlDocumentLocation, addressingNamespace);
+
+ W3CEndpointReference w3cEPR = null;
+
+ try {
+ if (interfaceName != null)
+ EndpointReferenceUtils.addInterface(axis2EPR, interfaceName, addressingNamespace);
+
+ if (metadata != null)
+ EndpointReferenceUtils.addMetadata(axis2EPR, metadata.toArray(ZERO_LENGTH_ARRAY));
+
+ if (referenceParameters != null)
+ EndpointReferenceUtils.addReferenceParameters(axis2EPR, referenceParameters.toArray(ZERO_LENGTH_ARRAY));
+
+ if (elements != null)
+ EndpointReferenceUtils.addExtensibleElements(axis2EPR, elements.toArray(ZERO_LENGTH_ARRAY));
+
+ if (attributes != null)
+ EndpointReferenceUtils.addExtensibleAttributes(axis2EPR, attributes);
+
+ w3cEPR =
+ (W3CEndpointReference) EndpointReferenceUtils.convertFromAxis2(axis2EPR, addressingNamespace);
+ }
+ catch (Exception e) {
+ throw ExceptionFactory.
+ makeWebServiceException(Messages.getMessage("referenceParameterConstructionErr"),
+ e);
+ }
+
+ return w3cEPR;
+ }
@Override
public <T> T getPort(EndpointReference jaxwsEPR, Class<T> sei, WebServiceFeature... features) {
Added: axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Echo.wsdl
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Echo.wsdl?rev=939784&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Echo.wsdl (added)
+++ axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Echo.wsdl Fri Apr 30 19:12:58 2010
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://org/apache/axis2/jaxws/samples/echo/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="EchoService"
+ targetNamespace="http://org/apache/axis2/jaxws/samples/echo/">
+ <wsdl:types>
+ <xsd:schema
+ targetNamespace="http://org/apache/axis2/jaxws/samples/echo/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
+
+ <xsd:element name="echoStringResponse">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="echoResponse"
+ type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ <xsd:element name="echoStringInput">
+ <xsd:complexType>
+ <xsd:sequence>
+ <xsd:element name="echoInput" type="xsd:string"/>
+ </xsd:sequence>
+ </xsd:complexType>
+ </xsd:element>
+
+ </xsd:schema>
+ </wsdl:types>
+ <wsdl:message name="echoOperationRequest">
+ <wsdl:part element="tns:echoStringInput" name="parameter"/>
+ </wsdl:message>
+ <wsdl:message name="echoOperationResponse">
+ <wsdl:part element="tns:echoStringResponse" name="parameter"/>
+ </wsdl:message>
+ <wsdl:portType name="EchoServicePortType">
+
+ <wsdl:operation name="echoOperation">
+ <wsdl:input message="tns:echoOperationRequest"/>
+ <wsdl:output message="tns:echoOperationResponse"/>
+ </wsdl:operation>
+ </wsdl:portType>
+ <wsdl:binding name="EchoSOAP" type="tns:EchoServicePortType">
+ <soap:binding style="document"
+ transport="http://schemas.xmlsoap.org/soap/http"/>
+ <wsdl:operation name="echoOperation">
+ <soap:operation soapAction="echoOperation" style="document"/>
+ <wsdl:input>
+ <soap:body use="literal"/>
+ </wsdl:input>
+ <wsdl:output>
+ <soap:body use="literal"/>
+ </wsdl:output>
+ </wsdl:operation>
+ </wsdl:binding>
+ <wsdl:service name="EchoService">
+ <wsdl:port binding="tns:EchoSOAP" name="EchoServicePort">
+ <soap:address
+ location="http://localhost:8080/jaxws-samples/services/EchoService"/>
+ </wsdl:port>
+ </wsdl:service>
+</wsdl:definitions>
Added: axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Invalid.wsdl
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Invalid.wsdl?rev=939784&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Invalid.wsdl (added)
+++ axis/axis2/java/core/trunk/modules/jaxws/test-resources/wsdl/Invalid.wsdl Fri Apr 30 19:12:58 2010
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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.
+ -->
+<wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+ xmlns:tns="http://org/apache/axis2/jaxws/samples/echo/"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="EchoService"
+ targetNamespace="http://org/apache/axis2/jaxws/samples/echo/">
+
+</wsdl:definitions>
Added: axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ProviderTests.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ProviderTests.java?rev=939784&view=auto
==============================================================================
--- axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ProviderTests.java (added)
+++ axis/axis2/java/core/trunk/modules/jaxws/test/org/apache/axis2/jaxws/spi/ProviderTests.java Fri Apr 30 19:12:58 2010
@@ -0,0 +1,191 @@
+/*
+ * 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.spi;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
+
+import org.apache.axis2.util.XMLUtils;
+import org.custommonkey.xmlunit.XMLTestCase;
+import org.custommonkey.xmlunit.XMLUnit;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ProviderTests extends XMLTestCase {
+ Provider provider = new Provider();
+ W3CEndpointReference w3cEpr;
+ String address = "http://localhost:8080/jaxws-samples/services/EchoService";
+ QName interfaceName = new QName("http://org/apache/axis2/jaxws/samples/echo/", "EchoServicePortType", "tns");
+ QName serviceName = new QName("http://org/apache/axis2/jaxws/samples/echo/", "EchoService", "tns");
+ QName portName = new QName("http://org/apache/axis2/jaxws/samples/echo/", "EchoServicePort", "tns");
+ String wsdlDocumentLocation = getClass().getResource("/wsdl/Echo.wsdl").toExternalForm();
+
+ List<Element> metadata = new ArrayList<Element>();
+ List<Element> referenceParameters = new ArrayList<Element>();
+ List<Element> elements = new ArrayList<Element>();
+ Map<QName,String> attributes = new HashMap<QName,String>();
+
+ /* Test the new createW3CEndpointReference method added for JAX-WS 2.2 */
+
+ public void test22CreateW3CEndpointReferenceAllNull() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(null, null, null, null, null, null, null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - address, serviceName and portName are all null
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceServiceAndPortName() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(null, null, serviceName, portName, null, null, null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - address property is null and the serviceName and portName do not specify a valid endpoint published by the same Java EE application.
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceAddressPortName() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, null, null, portName, null, null, null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - serviceName service is null and the portName is NOT null
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceServiceNotInWSDL() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, interfaceName, new QName("UnknownService"), portName, null, wsdlDocumentLocation, null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - serviceName is NOT null and is not present in the specified WSDL
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferencePortNameNotInWSDL() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, interfaceName, serviceName, new QName("UnknownPort"), null, wsdlDocumentLocation, null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - portName port is not null and it is not present in serviceName service in the WSDL
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceInvalidWSDL() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, interfaceName, serviceName, portName, null, getClass().getResource("/wsdl/Invalid.wsdl").toExternalForm(), null, null, null);
+ } catch (IllegalStateException e) {
+ // Expected Exception - wsdlDocumentLocation is NOT null and does not represent a valid WSDL
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceMissingWSDLLocationNamespace() {
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, null, new QName("EchoService"), new QName("EchoServicePort"), null, wsdlDocumentLocation, null, null, null);
+ System.out.println(w3cEpr);
+ } catch (IllegalStateException e) {
+ // Expected Exception - wsdlDocumentLocation is NOT null but wsdli:wsdlLocation's namespace name cannot be got from the available metadata
+ return;
+ }
+ fail("Did not catch expected IllegalStateException");
+ }
+
+ public void test22CreateW3CEndpointReferenceOnlyAddress() throws Exception {
+ XMLUnit.setIgnoreWhitespace(true);
+ try {
+ w3cEpr = provider.createW3CEndpointReference(address, null, null, null, null, null, null, null, null);
+
+ String expectedEPR = "<EndpointReference xmlns=\"http://www.w3.org/2005/08/addressing\">" +
+ "<Address>http://localhost:8080/jaxws-samples/services/EchoService</Address>"+
+ "</EndpointReference>";
+
+ assertXMLEqual(expectedEPR, w3cEpr.toString());
+ } finally {
+ XMLUnit.setIgnoreWhitespace(false);
+ }
+ }
+
+ public void test22CreateW3CEndpointReference() throws Exception {
+ XMLUnit.setIgnoreWhitespace(true);
+ try {
+ Document doc = XMLUtils.newDocument();
+
+ // Create metadata
+ Element metadata1 = doc.createElementNS("http://test.com", "test:testMetadata1");
+ metadata.add(metadata1);
+ Element metadata2 = doc.createElementNS("http://test.com", "test:testMetadata2");
+ metadata.add(metadata2);
+
+ // Create reference parameters
+ Element key = doc.createElementNS("http://example.com/fabrikam", "fabrikam:CustomerKey");
+ key.appendChild(doc.createTextNode("123456789"));
+ referenceParameters.add(key);
+ Element cart = doc.createElementNS("http://example.com/fabrikam", "fabrikam:ShoppingCart");
+ cart.appendChild(doc.createTextNode("ABCDEFG"));
+ referenceParameters.add(cart);
+
+ // Create elements
+ Element element1 = doc.createElementNS("http://test.com", "test:testElement1");
+ elements.add(element1);
+ Element element2 = doc.createElementNS("http://test.com", "test:testElement2");
+ elements.add(element2);
+
+ // Create attributes
+ attributes.put(new QName("http://test.com", "attribute1", "test"), "value1");
+ attributes.put(new QName("http://test.com", "attribute2", "test"), "value2");
+
+ w3cEpr = provider.createW3CEndpointReference(address, interfaceName, serviceName, portName, metadata, wsdlDocumentLocation, referenceParameters, elements, attributes);
+
+ // Cannot put EPR in an external file since absolute WSDL location cannot be hard coded
+ String expectedEPR = "<EndpointReference test:attribute1=\"value1\" test:attribute2=\"value2\" xmlns=\"http://www.w3.org/2005/08/addressing\" xmlns:test=\"http://test.com\">" +
+ "<Address>http://localhost:8080/jaxws-samples/services/EchoService</Address>" +
+ "<ReferenceParameters xmlns:fabrikam=\"http://example.com/fabrikam\">" +
+ "<fabrikam:CustomerKey>123456789</fabrikam:CustomerKey>" +
+ "<fabrikam:ShoppingCart>ABCDEFG</fabrikam:ShoppingCart>" +
+ "</ReferenceParameters>" +
+ "<Metadata xmlns:wsam=\"http://www.w3.org/2007/05/addressing/metadata\" xmlns:tns=\"http://org/apache/axis2/jaxws/samples/echo/\" xmlns:wsdli=\"http://www.w3.org/ns/wsdl-instance\" wsdli:wsdlLocation=\"http://org/apache/axis2/jaxws/samples/echo/ " + wsdlDocumentLocation + "\">" +
+ "<wsam:ServiceName EndpointName=\"EchoServicePort\">tns:EchoService</wsam:ServiceName>" +
+ "<wsam:InterfaceName>tns:EchoServicePortType</wsam:InterfaceName>" +
+ "<test:testMetadata1/>" +
+ "<test:testMetadata2/>" +
+ "</Metadata>" +
+ "<test:testElement1/>" +
+ "<test:testElement2/>" +
+ "</EndpointReference>";
+
+ assertXMLEqual(expectedEPR, w3cEpr.toString());
+ } finally {
+ XMLUnit.setIgnoreWhitespace(false);
+ }
+ }
+}