You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by mm...@apache.org on 2007/12/05 10:13:17 UTC
svn commit: r601261 - in /incubator/cxf/trunk:
api/src/main/java/org/apache/cxf/ws/addressing/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/
rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/
systests/src/test/java/org/apache/cxf/sy...
Author: mmao
Date: Wed Dec 5 01:13:14 2007
New Revision: 601261
URL: http://svn.apache.org/viewvc?rev=601261&view=rev
Log:
CXF-1241
WS-A Action/FaultAction support From Java approach
Modified:
incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/server/Server.java
incubator/cxf/trunk/systests/src/test/resources/wsdl/add_numbers-fromjava.wsdl
Modified: incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java (original)
+++ incubator/cxf/trunk/api/src/main/java/org/apache/cxf/ws/addressing/JAXWSAConstants.java Wed Dec 5 01:13:14 2007
@@ -20,11 +20,16 @@
package org.apache.cxf.ws.addressing;
+import javax.xml.namespace.QName;
+
/**
* A container for WS-Addressing constants.
*/
public final class JAXWSAConstants {
+
+ public static final QName WSAW_ACTION_QNAME = new QName("http://www.w3.org/2006/05/addressing/wsdl",
+ "Action");
/**
* Well-known Property names for AddressingProperties in BindingProvider
Modified: incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Wed Dec 5 01:13:14 2007
@@ -28,7 +28,9 @@
import java.util.logging.Logger;
import javax.wsdl.Operation;
import javax.xml.namespace.QName;
+import javax.xml.ws.Action;
import javax.xml.ws.AsyncHandler;
+import javax.xml.ws.FaultAction;
import javax.xml.ws.Service;
import javax.xml.ws.Service.Mode;
import javax.xml.ws.WebFault;
@@ -60,6 +62,8 @@
import org.apache.cxf.service.model.MessageInfo;
import org.apache.cxf.service.model.MessagePartInfo;
import org.apache.cxf.service.model.OperationInfo;
+import org.apache.cxf.service.model.ServiceInfo;
+import org.apache.cxf.ws.addressing.JAXWSAConstants;
import org.apache.cxf.wsdl11.WSDLServiceBuilder;
/**
@@ -467,5 +471,50 @@
public void setWsFeatures(List<WebServiceFeature> wsFeatures) {
this.wsFeatures = wsFeatures;
+ }
+
+ private FaultInfo getFaultInfo(final OperationInfo operation, final Class expClass) {
+ for (FaultInfo fault : operation.getFaults()) {
+ if (fault.getProperty(Class.class.getName()) == expClass) {
+ return fault;
+ }
+ }
+ return null;
+ }
+
+ private void buildWSAActions(OperationInfo operation, Method method) {
+ Action action = method.getAnnotation(Action.class);
+ if (action == null) {
+ return;
+ }
+ String ns = operation.getName().getNamespaceURI();
+ MessageInfo input = operation.getInput();
+ if (action.input() != null) {
+ input.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME, new QName(ns, action.input()));
+ }
+
+ MessageInfo output = operation.getOutput();
+ if (output != null && action.output() != null) {
+ output.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME, new QName(ns, action.output()));
+ }
+
+ FaultAction[] faultActions = action.fault();
+ if (faultActions != null && operation.getFaults() != null) {
+ for (FaultAction faultAction : faultActions) {
+ FaultInfo faultInfo = getFaultInfo(operation, faultAction.className());
+ faultInfo.addExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME,
+ new QName(ns, faultAction.value()));
+ }
+ }
+ }
+
+ @Override
+ protected OperationInfo createOperation(ServiceInfo serviceInfo, InterfaceInfo intf, Method m) {
+ OperationInfo op = super.createOperation(serviceInfo, intf, m);
+ if (op.getUnwrappedOperation() != null) {
+ op = op.getUnwrappedOperation();
+ }
+ buildWSAActions(op, m);
+ return op;
}
}
Modified: incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original)
+++ incubator/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Wed Dec 5 01:13:14 2007
@@ -62,8 +62,6 @@
LogUtils.getL7dLogger(MAPAggregator.class);
private static final ResourceBundle BUNDLE = LOG.getResourceBundle();
- private static final QName WSAW_ACTION_QNAME = new QName("http://www.w3.org/2006/05/addressing/wsdl",
- "Action");
/**
@@ -400,7 +398,7 @@
MessageInfo inputMessage = operation.getInput();
if (inputMessage.getExtensionAttributes() != null) {
- QName inputAction = (QName)inputMessage.getExtensionAttribute(WSAW_ACTION_QNAME);
+ QName inputAction = (QName)inputMessage.getExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME);
if (inputAction != null) {
return inputAction.getLocalPart();
}
@@ -411,7 +409,8 @@
private String getActionFromOutputMessage(final OperationInfo operation) {
MessageInfo outputMessage = operation.getOutput();
if (outputMessage != null && outputMessage.getExtensionAttributes() != null) {
- QName outputAction = (QName)outputMessage.getExtensionAttribute(WSAW_ACTION_QNAME);
+ QName outputAction =
+ (QName)outputMessage.getExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME);
if (outputAction != null) {
return outputAction.getLocalPart();
}
@@ -438,7 +437,8 @@
for (FaultInfo faultInfo : operation.getFaults()) {
if (isSameFault(faultInfo, faultName)) {
if (faultInfo.getExtensionAttributes() != null) {
- QName faultAction = (QName)faultInfo.getExtensionAttribute(WSAW_ACTION_QNAME);
+ QName faultAction =
+ (QName)faultInfo.getExtensionAttribute(JAXWSAConstants.WSAW_ACTION_QNAME);
return faultAction.getLocalPart();
}
return addPath(addPath(getActionBaseUri(operation), "Fault"),
@@ -446,7 +446,7 @@
}
}
}
- return null;
+ return addPath(addPath(getActionBaseUri(operation), "Fault"), faultName);
}
private String getFaultNameFromMessage(final Message message) {
@@ -457,7 +457,7 @@
return t.name();
}
}
- return null;
+ return e.getCause().getClass().getSimpleName();
}
protected String getActionUri(Message message) {
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/WSAFromJavaTest.java Wed Dec 5 01:13:14 2007
@@ -28,6 +28,7 @@
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.systest.ws.addr_fromjava.client.AddNumberImpl;
import org.apache.cxf.systest.ws.addr_fromjava.client.AddNumberImplService;
+import org.apache.cxf.systest.ws.addr_fromjava.client.AddNumbersException_Exception;
import org.apache.cxf.systest.ws.addr_fromjava.server.Server;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.junit.Before;
@@ -76,9 +77,67 @@
String expectedOut = "http://cxf.apache.org/input";
assertTrue(output.toString().indexOf(expectedOut) != -1);
- // TODO: will support response action after the java2wsdl support the wsa:action
String expectedIn = "http://cxf.apache.org/output";
- assertTrue(input.toString().indexOf(expectedIn) == -1);
+ assertTrue(input.toString().indexOf(expectedIn) != -1);
+ }
+
+ @Test
+ public void testAddNumbersFault() {
+ ByteArrayOutputStream input = setupInLogging();
+ ByteArrayOutputStream output = setupOutLogging();
+
+ AddNumberImpl port = getPort();
+
+ try {
+ port.addNumbers(-1, 2);
+ } catch (AddNumbersException_Exception e) {
+ assert true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ assert false;
+ }
+
+ assertTrue(output.toString().indexOf("http://cxf.apache.org/input") != -1);
+ String expectedFault =
+ "http://server.addr_fromjava.ws.systest.cxf.apache.org/AddNumberImpl/Fault/AddNumbersException";
+ assertTrue(input.toString().indexOf(expectedFault) != -1);
+ }
+
+ @Test
+ public void testAddNumbers2() throws Exception {
+ ByteArrayOutputStream input = setupInLogging();
+ ByteArrayOutputStream output = setupOutLogging();
+
+ AddNumberImpl port = getPort();
+
+ assertEquals(3, port.addNumbers2(1, 2));
+
+ String base = "http://server.addr_fromjava.ws.systest.cxf.apache.org/AddNumberImpl";
+ String expectedOut = base + "/addNumbers2";
+ assertTrue(output.toString().indexOf(expectedOut) != -1);
+
+ String expectedIn = base + "/addNumbers2Response";
+ assertTrue(input.toString().indexOf(expectedIn) != -1);
+ }
+
+ @Test
+ public void testAddNumbers3Fault() {
+ ByteArrayOutputStream input = setupInLogging();
+ ByteArrayOutputStream output = setupOutLogging();
+
+ AddNumberImpl port = getPort();
+
+ try {
+ port.addNumbers3(-1, 2);
+ } catch (AddNumbersException_Exception e) {
+ assert true;
+ } catch (Exception e) {
+ e.printStackTrace();
+ assert false;
+ }
+
+ assertTrue(output.toString().indexOf("http://cxf.apache.org/input") != -1);
+ assertTrue(input.toString().indexOf("http://cxf.apache.org/fault3") != -1);
}
private AddNumberImpl getPort() {
Modified: incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/server/Server.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/server/Server.java?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/server/Server.java (original)
+++ incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/ws/addr_fromjava/server/Server.java Wed Dec 5 01:13:14 2007
@@ -27,7 +27,7 @@
protected void run() {
Object implementor = new AddNumberImpl();
- String address = "http://localhost:9092/AddNumberImplPort";
+ String address = "http://localhost:9093/AddNumberImplPort";
EndpointImpl ep = new EndpointImpl(implementor);
Modified: incubator/cxf/trunk/systests/src/test/resources/wsdl/add_numbers-fromjava.wsdl
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/resources/wsdl/add_numbers-fromjava.wsdl?rev=601261&r1=601260&r2=601261&view=diff
==============================================================================
--- incubator/cxf/trunk/systests/src/test/resources/wsdl/add_numbers-fromjava.wsdl (original)
+++ incubator/cxf/trunk/systests/src/test/resources/wsdl/add_numbers-fromjava.wsdl Wed Dec 5 01:13:14 2007
@@ -155,7 +155,7 @@
</wsdl:binding>
<wsdl:service name="AddNumberImplService">
<wsdl:port name="AddNumberImplPort" binding="tns:AddNumberImplServiceSoapBinding">
- <soap:address location="http://localhost:9092/AddNumberImplPort"/>
+ <soap:address location="http://localhost:9093/AddNumberImplPort"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>