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) {