Author: dkulp
Date: Tue May 25 18:19:36 2010
New Revision: 948148
URL: http://svn.apache.org/viewvc?rev=948148&view=rev
Log:
Merged revisions 946823 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r946823 | dkulp | 2010-05-20 19:34:15 -0400 (Thu, 20 May 2010) | 2 lines
JAX-WS 2.2 spec mandates use of addressing metadata spec. Add those
extensors along with the older extensors
........
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
cxf/branches/2.2.x-fixes/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java?rev=948148&r1=948147&r2=948148&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
(original)
+++
cxf/branches/2.2.x-fixes/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
Tue May 25 18:19:36 2010
@@ -34,6 +34,7 @@ public final class JAXWSAConstants {
public static final String NS_WSAM =
"http://www.w3.org/2007/05/addressing/metadata";
public static final QName WSAW_ACTION_QNAME = new QName(NS_WSAW,
"Action");
+ public static final QName WSAM_ACTION_QNAME = new QName(NS_WSAM,
"Action");
public static final QName WSAW_USINGADDRESSING_QNAME = new QName(NS_WSAW,
"UsingAddressing");
Modified:
cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java?rev=948148&r1=948147&r2=948148&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
(original)
+++
cxf/branches/2.2.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/W3CDOMStreamWriter.java
Tue May 25 18:19:36 2010
@@ -142,8 +142,8 @@ public class W3CDOMStreamWriter implemen
writeEndElement();
}
- public void writeEmptyElement(String prefix, String namespace, String
local) throws XMLStreamException {
- writeStartElement(prefix, namespace, local);
+ public void writeEmptyElement(String prefix, String local, String
namespace) throws XMLStreamException {
+ writeStartElement(prefix, local, namespace);
writeEndElement();
}
Modified:
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java?rev=948148&r1=948147&r2=948148&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsEndpointImpl.java
Tue May 25 18:19:36 2010
@@ -22,9 +22,9 @@ package org.apache.cxf.jaxws.support;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
-import javax.wsdl.WSDLException;
import javax.wsdl.extensions.ExtensibilityElement;
import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.extensions.UnknownExtensibilityElement;
import javax.xml.ws.Binding;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.WebServiceFeature;
@@ -33,6 +33,8 @@ import javax.xml.ws.soap.AddressingFeatu
import javax.xml.ws.soap.MTOMFeature;
import javax.xml.ws.soap.SOAPBinding;
+import org.w3c.dom.Element;
+
import org.apache.cxf.Bus;
import org.apache.cxf.binding.soap.SoapBinding;
import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
@@ -41,6 +43,7 @@ import org.apache.cxf.binding.xml.XMLBin
import org.apache.cxf.endpoint.EndpointException;
import org.apache.cxf.endpoint.EndpointImpl;
import org.apache.cxf.feature.AbstractFeature;
+import org.apache.cxf.helpers.DOMUtils;
import org.apache.cxf.interceptor.AbstractInDatabindingInterceptor;
import org.apache.cxf.interceptor.Interceptor;
import org.apache.cxf.jaxws.binding.DefaultBindingImpl;
@@ -63,9 +66,12 @@ import org.apache.cxf.jaxws.interceptors
import org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor;
import org.apache.cxf.service.Service;
import org.apache.cxf.service.model.BindingInfo;
+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.JAXWSAConstants;
import org.apache.cxf.ws.addressing.WSAddressingFeature;
+import org.apache.cxf.ws.policy.PolicyConstants;
import org.apache.cxf.wsdl.WSDLManager;
/**
@@ -229,22 +235,93 @@ public class JaxWsEndpointImpl extends E
WSAW_USINGADDRESSING_QNAME);
el.setRequired(addressing.required());
bindingInfo.addExtensor(el);
- } catch (WSDLException e) {
- // TODO Auto-generated catch block
+
+ StringBuilder polRefId = new
StringBuilder(bindingInfo.getName().getLocalPart());
+ polRefId.append("_WSAM_Addressing_Policy");
+ UnknownExtensibilityElement uel = new
UnknownExtensibilityElement();
+
+ W3CDOMStreamWriter writer = new W3CDOMStreamWriter();
+ writer.writeStartElement("wsp", "PolicyReference",
PolicyConstants.NAMESPACE_WS_POLICY);
+ writer.writeAttribute("URI", "#" + polRefId.toString());
+ writer.writeEndElement();
+ Element pr = writer.getDocument().getDocumentElement();
+ uel.setElement(pr);
+ uel.setElementType(DOMUtils.getElementQName(pr));
+ bindingInfo.addExtensor(uel);
+
+ writer = new W3CDOMStreamWriter();
+ writer.writeStartElement("wsp", "Policy",
PolicyConstants.NAMESPACE_WS_POLICY);
+ writer.writeAttribute("wsu", PolicyConstants.WSU_NAMESPACE_URI,
+ PolicyConstants.WSU_ID_ATTR_NAME,
polRefId.toString());
+ writer.writeStartElement("wsam", "Addressing",
JAXWSAConstants.NS_WSAM);
+ if (!addressing.required()) {
+ writer.writeAttribute("wsp",
PolicyConstants.NAMESPACE_WS_POLICY,
+ "Optional", "true");
+ }
+ writer.writeStartElement("wsp", "Policy",
PolicyConstants.NAMESPACE_WS_POLICY);
+
+ String s = getAddressingRequirement(addressing);
+ if (s != null) {
+ writer.writeEmptyElement("wsam", s,
JAXWSAConstants.NS_WSAM);
+ }
+
+ writer.writeEndElement();
+ writer.writeEndElement();
+ writer.writeEndElement();
+
+ pr = writer.getDocument().getDocumentElement();
+
+ uel = new UnknownExtensibilityElement();
+ uel.setElement(pr);
+ uel.setElementType(DOMUtils.getElementQName(pr));
+ if (bindingInfo.getService().getDescription() == null) {
+ DescriptionInfo description = new DescriptionInfo();
+ description.setName(bindingInfo.getService().getName());
+ bindingInfo.getService().setDescription(description);
+ }
+ bindingInfo.getService().getDescription().addExtensor(uel);
+
+ } catch (Exception e) {
+ //ignore
e.printStackTrace();
}
}
}
+ private String getAddressingRequirement(Addressing addressing) {
+ try {
+ Object o =
Addressing.class.getMethod("responses").invoke(addressing);
+ if (o != null) {
+ String s = o.toString();
+ if ("ANONYMOUS".equals(s)) {
+ return "AnonymousResponses";
+ } else if ("NON_ANONYMOUS".equals(s)) {
+ return "NonAnonymousResponses";
+ }
+ }
+ } catch (Throwable ex) {
+ //ignore - probably JAX-WS 2.1
+ }
+ return null;
+ }
+
private Addressing getAddressing() {
- Class<?> serviceClass = implInfo.getSEIClass();
- if (serviceClass == null) {
- serviceClass = implInfo.getImplementorClass();
+ Class<?> serviceClass = implInfo.getImplementorClass();
+ if (serviceClass != null) {
+ Addressing ad = serviceClass.getAnnotation(Addressing.class);
+ if (ad != null) {
+ return ad;
+ }
}
- if (serviceClass == null) {
- return null;
+
+ serviceClass = implInfo.getSEIClass();
+ if (serviceClass != null) {
+ Addressing ad = serviceClass.getAnnotation(Addressing.class);
+ if (ad != null) {
+ return ad;
+ }
}
- return serviceClass.getAnnotation(Addressing.class);
+ return null;
}
public Binding getJaxwsBinding() {
Modified:
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?rev=948148&r1=948147&r2=948148&view=diff
==============================================================================
---
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
(original)
+++
cxf/branches/2.2.x-fixes/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
Tue May 25 18:19:36 2010
@@ -480,11 +480,19 @@ public class JaxWsServiceFactoryBean ext
MessageInfo input = operation.getInput();
if (!StringUtils.isEmpty(action.input())) {
input.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
action.input());
+ input.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
action.input());
+ } else {
+ input.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ computeAction(operation, "Request"));
}
MessageInfo output = operation.getOutput();
if (output != null && !StringUtils.isEmpty(action.output())) {
output.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
action.output());
+ output.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
action.output());
+ } else if (output != null) {
+ output.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ computeAction(operation,
"Response"));
}
FaultAction[] faultActions = action.fault();
@@ -495,15 +503,41 @@ public class JaxWsServiceFactoryBean ext
FaultInfo faultInfo = getFaultInfo(operation,
faultAction.className());
faultInfo.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
faultAction.value());
+
faultInfo.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ faultAction.value());
if (operation.isUnwrappedCapable()) {
faultInfo =
getFaultInfo(operation.getUnwrappedOperation(), faultAction.className());
faultInfo.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
faultAction.value());
+
faultInfo.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ faultAction.value());
}
}
- }
+ }
+ for (FaultInfo fi : operation.getFaults()) {
+ if (fi.getExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME) ==
null) {
+ String f = "/Fault/" + fi.getName().getLocalPart();
+ fi.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ computeAction(operation, f));
+ if (operation.isUnwrappedCapable()) {
+ fi =
operation.getUnwrappedOperation().getFault(fi.getName());
+
fi.addExtensionAttribute(JAXWSAConstants.WSAM_ACTION_QNAME,
+ computeAction(operation, f));
+ }
+ }
+ }
}
+ private Object computeAction(OperationInfo op, String postFix) {
+ StringBuilder s = new StringBuilder(op.getName().getNamespaceURI());
+ if (s.charAt(s.length() - 1) != '/') {
+ s.append('/');
+ }
+ s.append(op.getInterface().getName().getLocalPart())
+ .append('/').append(op.getName().getLocalPart()).append(postFix);
+ return s.toString();
+ }
+
@Override
protected OperationInfo createOperation(ServiceInfo serviceInfo,
InterfaceInfo intf, Method m) {
OperationInfo op = super.createOperation(serviceInfo, intf, m);