You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/05/20 23:08:05 UTC
svn commit: r658433 - in /cxf/trunk:
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/
rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/
rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/
rt/frontend/simple/src/main/java/org/...
Author: dkulp
Date: Tue May 20 14:08:04 2008
New Revision: 658433
URL: http://svn.apache.org/viewvc?rev=658433&view=rev
Log:
[CXF-1575, CXF-1592] Don't map webServiceException into the wsdl. In some cases, allow an older saaj implementation.
Modified:
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java
cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
cxf/trunk/systests/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java?rev=658433&r1=658432&r2=658433&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java Tue May 20 14:08:04 2008
@@ -31,6 +31,7 @@
import java.util.logging.Logger;
import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPException;
import javax.xml.soap.SOAPFault;
import javax.xml.ws.AsyncHandler;
import javax.xml.ws.Binding;
@@ -190,31 +191,11 @@
exception.initCause(ex);
throw exception;
} else if (getBinding() instanceof SOAPBinding) {
- SOAPFault soapFault = ((SOAPBinding)getBinding()).getSOAPFactory().createFault();
+ SOAPFault soapFault = createSoapFault(ex);
+ if (soapFault == null) {
+ throw new WebServiceException(ex);
+ }
- if (ex instanceof SoapFault) {
- soapFault.setFaultString(((SoapFault)ex).getReason());
- soapFault.setFaultCode(((SoapFault)ex).getFaultCode());
- soapFault.setFaultActor(((SoapFault)ex).getRole());
-
- Node nd = soapFault.getOwnerDocument().importNode(((SoapFault)ex).getOrCreateDetail(),
- true);
- nd = nd.getFirstChild();
- soapFault.addDetail();
- while (nd != null) {
- Node next = nd.getNextSibling();
- soapFault.getDetail().appendChild(nd);
- nd = next;
- }
-
- } else {
- soapFault.setFaultCode(new QName("http://cxf.apache.org/faultcode", "HandlerFault"));
- String msg = ex.getMessage();
- if (msg != null) {
- soapFault.setFaultString(msg);
- }
- }
-
SOAPFaultException exception = new SOAPFaultException(soapFault);
exception.initCause(ex);
throw exception;
@@ -241,6 +222,47 @@
}
+ private SOAPFault createSoapFault(Exception ex) throws SOAPException {
+ SOAPFault soapFault;
+ try {
+ soapFault = ((SOAPBinding)getBinding()).getSOAPFactory().createFault();
+ } catch (Throwable t) {
+ //probably an old version of saaj or something that is not allowing createFault
+ //method to work. Try the saaj 1.2 method of doing this.
+ try {
+ soapFault = ((SOAPBinding)getBinding()).getMessageFactory().createMessage()
+ .getSOAPBody().addFault();
+ } catch (Throwable t2) {
+ //still didn't work, we'll just throw what we have
+ return null;
+ }
+ }
+
+ if (ex instanceof SoapFault) {
+ soapFault.setFaultString(((SoapFault)ex).getReason());
+ soapFault.setFaultCode(((SoapFault)ex).getFaultCode());
+ soapFault.setFaultActor(((SoapFault)ex).getRole());
+
+ Node nd = soapFault.getOwnerDocument().importNode(((SoapFault)ex).getOrCreateDetail(),
+ true);
+ nd = nd.getFirstChild();
+ soapFault.addDetail();
+ while (nd != null) {
+ Node next = nd.getNextSibling();
+ soapFault.getDetail().appendChild(nd);
+ nd = next;
+ }
+
+ } else {
+ soapFault.setFaultCode(new QName("http://cxf.apache.org/faultcode", "HandlerFault"));
+ String msg = ex.getMessage();
+ if (msg != null) {
+ soapFault.setFaultString(msg);
+ }
+ }
+ return soapFault;
+ }
+
private boolean addressChanged(String address) {
return !(address == null
|| getClient().getEndpoint().getEndpointInfo() == null
Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java?rev=658433&r1=658432&r2=658433&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBean.java Tue May 20 14:08:04 2008
@@ -350,7 +350,8 @@
protected Class<?> getBeanClass(Class<?> exClass) {
try {
if (java.rmi.ServerException.class.isAssignableFrom(exClass)
- || java.rmi.RemoteException.class.isAssignableFrom(exClass)) {
+ || java.rmi.RemoteException.class.isAssignableFrom(exClass)
+ || "javax.xml.ws".equals(exClass.getPackage().getName())) {
return null;
}
Modified: cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java?rev=658433&r1=658432&r2=658433&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/support/JaxWsServiceFactoryBeanTest.java Tue May 20 14:08:04 2008
@@ -24,10 +24,13 @@
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
+
+import javax.jws.WebService;
import javax.wsdl.Definition;
import javax.wsdl.factory.WSDLFactory;
import javax.xml.namespace.QName;
import javax.xml.ws.Binding;
+import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;
import javax.xml.ws.soap.MTOMFeature;
import javax.xml.ws.soap.SOAPBinding;
@@ -254,4 +257,28 @@
assertTrue(binding instanceof SOAPBinding);
assertTrue(((SOAPBinding)binding).isMTOMEnabled());
}
+
+ @Test
+ public void testWebSeviceException() throws Exception {
+ ReflectionServiceFactoryBean bean = new JaxWsServiceFactoryBean();
+ Bus bus = getBus();
+ bean.setBus(bus);
+ bean.setServiceClass(WebServiceExceptionTestImpl.class);
+ Service service = bean.create();
+ ServiceInfo si = service.getServiceInfos().get(0);
+ ServiceWSDLBuilder builder = new ServiceWSDLBuilder(bus, si);
+ Definition def = builder.build();
+
+ Document wsdl = WSDLFactory.newInstance().newWSDLWriter().getDocument(def);
+
+ assertInvalid("/wsdl:definitions/wsdl:message[@name='WebServiceException']", wsdl);
+ }
+
+ @WebService
+ public static class WebServiceExceptionTestImpl {
+ public int echoInt(int i) throws WebServiceException {
+ return i;
+ }
+
+ }
}
Modified: cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java?rev=658433&r1=658432&r2=658433&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java (original)
+++ cxf/trunk/rt/frontend/simple/src/main/java/org/apache/cxf/service/factory/ReflectionServiceFactoryBean.java Tue May 20 14:08:04 2008
@@ -680,6 +680,9 @@
for (int i = 0; i < types.length; i++) {
Class exClass = types[i];
Class beanClass = getBeanClass(exClass);
+ if (beanClass == null) {
+ continue;
+ }
QName name = getFaultName(o.getInterface(), o, exClass, beanClass);
Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java?rev=658433&r1=658432&r2=658433&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/aegis/AegisClientServerTest.java Tue May 20 14:08:04 2008
@@ -40,7 +40,6 @@
import org.apache.cxf.test.TestUtilities;
import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
public class AegisClientServerTest extends AbstractBusClientServerTestBase {
@@ -156,12 +155,11 @@
assertEquals("Anullb", s);
}
- @Ignore
@Test
public void testDynamicClient() throws Exception {
DynamicClientFactory dcf = DynamicClientFactory.newInstance();
Client client = dcf.createClient("http://localhost:9002/jaxwsAndAegisSports?wsdl");
- Object r = client.invoke("getAttributeBean", (Object[]) null);
+ Object r = client.invoke("getAttributeBean")[0];
Method getAddrPlainString = r.getClass().getMethod("getAttrPlainString");
String s = (String)getAddrPlainString.invoke(r);
assertEquals("attrPlain", s);