You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by em...@apache.org on 2010/06/08 08:51:08 UTC

svn commit: r952550 - in /cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws: EndpointReferenceBuilder.java support/JaxWsEndpointImpl.java

Author: ema
Date: Tue Jun  8 06:51:07 2010
New Revision: 952550

URL: http://svn.apache.org/viewvc?rev=952550&view=rev
Log:
[CXF-2840]:Process the wsdl port extenstion EPR

Modified:
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointReferenceBuilder.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointReferenceBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointReferenceBuilder.java?rev=952550&r1=952549&r2=952550&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointReferenceBuilder.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/EndpointReferenceBuilder.java Tue Jun  8 06:51:07 2010
@@ -19,16 +19,27 @@
 
 package org.apache.cxf.jaxws;
 
+import java.util.Iterator;
+import java.util.List;
 import java.util.logging.Logger;
+
+import javax.wsdl.extensions.ExtensibilityElement;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.xml.namespace.QName;
+import javax.xml.transform.dom.DOMSource;
 import javax.xml.ws.EndpointReference;
 import javax.xml.ws.WebServiceException;
 import javax.xml.ws.wsaddressing.W3CEndpointReference;
 import javax.xml.ws.wsaddressing.W3CEndpointReferenceBuilder;
 
+import org.w3c.dom.Element;
+
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.jaxws.binding.soap.SOAPBindingImpl;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
+import org.apache.cxf.ws.addressing.Names;
 
 public class EndpointReferenceBuilder {
     private static final Logger LOG = LogUtils.getL7dLogger(EndpointReferenceBuilder.class);
@@ -38,6 +49,35 @@ public class EndpointReferenceBuilder {
         this.endpoint = e;
     }
     public EndpointReference getEndpointReference() {
+        
+        //if there is epr in wsdl, direct return this EPR
+        List<ExtensibilityElement> portExtensors = endpoint.getEndpointInfo()
+            .getExtensors(ExtensibilityElement.class);
+        if (portExtensors != null) {
+            Iterator<ExtensibilityElement> extensionElements = portExtensors.iterator();
+            QName wsaEpr = new QName(Names.WSA_NAMESPACE_NAME, "EndpointReference");
+            while (extensionElements.hasNext()) {
+                ExtensibilityElement ext = (ExtensibilityElement)extensionElements.next();
+                if (ext instanceof UnknownExtensibilityElement && wsaEpr.equals(ext.getElementType())) {
+                    Element eprEle = ((UnknownExtensibilityElement)ext).getElement();
+                    List<Element> addressElements = DOMUtils.getChildrenWithName(eprEle,
+                                                                                 Names.WSA_NAMESPACE_NAME,
+                                                                                 Names.WSA_ADDRESS_NAME);
+                    if (!addressElements.isEmpty()) {
+                        /*
+                         * [WSA-WSDL Binding] : in a SOAP 1.1 port described using WSDL 1.1, the location
+                         * attribute of a soap11:address element (if present) would have the same value as the
+                         * wsa:Address child element of the wsa:EndpointReference element.
+                         */
+                        addressElements.get(0).setTextContent(this.endpoint.getEndpointInfo().getAddress());
+                    }
+                    return W3CEndpointReference.readFrom(new DOMSource(eprEle));
+                }
+
+            }
+        }
+        
+        
         String bindingId = endpoint.getJaxwsBinding().getBindingID();   
         
         if (!SOAPBindingImpl.isSoapBinding(bindingId)) {
@@ -45,16 +85,17 @@ public class EndpointReferenceBuilder {
                                                                 LOG, bindingId).toString());
         }
         
-        W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();
-        
+        W3CEndpointReferenceBuilder builder = new W3CEndpointReferenceBuilder();      
         builder.address(this.endpoint.getEndpointInfo().getAddress());
+        
         builder.serviceName(this.endpoint.getService().getName());
         builder.endpointName(this.endpoint.getEndpointInfo().getName());
-        if (this.endpoint.getEndpointInfo().getService()
-                .getDescription() != null) {
-            builder.wsdlDocumentLocation(this.endpoint.getEndpointInfo().getService()
-                                         .getDescription().getBaseURI());
+
+        if (this.endpoint.getEndpointInfo().getService().getDescription() != null) {
+            builder.wsdlDocumentLocation(this.endpoint.getEndpointInfo().getService().getDescription()
+                .getBaseURI());
         }
+        
         return builder.build();
     }
 

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?rev=952550&r1=952549&r2=952550&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java Tue Jun  8 06:51:07 2010
@@ -25,6 +25,8 @@ import java.util.List;
 import javax.wsdl.extensions.ExtensibilityElement;
 import javax.wsdl.extensions.ExtensionRegistry;
 import javax.wsdl.extensions.UnknownExtensibilityElement;
+import javax.xml.namespace.QName;
+import javax.xml.transform.dom.DOMSource;
 import javax.xml.ws.Binding;
 import javax.xml.ws.Service.Mode;
 import javax.xml.ws.WebServiceFeature;
@@ -32,6 +34,7 @@ import javax.xml.ws.soap.Addressing;
 import javax.xml.ws.soap.AddressingFeature;
 import javax.xml.ws.soap.MTOMFeature;
 import javax.xml.ws.soap.SOAPBinding;
+import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
 import org.w3c.dom.Element;
 
@@ -70,7 +73,10 @@ import org.apache.cxf.service.model.Bind
 import org.apache.cxf.service.model.DescriptionInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.staxutils.W3CDOMStreamWriter;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.addressing.JAXWSAConstants;
+import org.apache.cxf.ws.addressing.Names;
+import org.apache.cxf.ws.addressing.VersionTransformer;
 import org.apache.cxf.ws.addressing.WSAddressingFeature;
 import org.apache.cxf.ws.policy.PolicyConstants;
 import org.apache.cxf.wsdl.WSDLManager;
@@ -195,6 +201,28 @@ public class JaxWsEndpointImpl extends E
             }
             addAddressingFeature(feature);
         }
+        extractWsdlEprs(endpoint);
+    }
+    
+    private void extractWsdlEprs(EndpointInfo endpoint) {
+        //parse the EPR in wsdl
+        List<ExtensibilityElement> portExtensors = endpoint.getExtensors(ExtensibilityElement.class);
+        if (portExtensors != null) {
+            Iterator<ExtensibilityElement> extensionElements = portExtensors.iterator();
+            QName wsaEpr = new QName(Names.WSA_NAMESPACE_NAME, "EndpointReference");
+            while (extensionElements.hasNext()) {
+                ExtensibilityElement ext = (ExtensibilityElement)extensionElements.next();
+                if (ext instanceof UnknownExtensibilityElement && wsaEpr.equals(ext.getElementType())) {
+                    DOMSource domSource = new DOMSource(((UnknownExtensibilityElement)ext).getElement());
+                    W3CEndpointReference w3cEPR = new W3CEndpointReference(domSource);
+                    EndpointReferenceType ref = VersionTransformer.convertToInternal(w3cEPR);
+                    endpoint.getTarget().setMetadata(ref.getMetadata());
+                    endpoint.getTarget().setReferenceParameters(ref.getReferenceParameters());
+                    endpoint.getTarget().getOtherAttributes().putAll(ref.getOtherAttributes());
+                }
+
+            }
+        }
     }
     
     private boolean hasUsingAddressing(List<ExtensibilityElement> exts) {