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 2018/07/23 23:24:09 UTC

[cxf] branch 3.2.x-fixes updated (e09cc41 -> 4bfa2e8)

This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a change to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git.


    from e09cc41  CXF-7804: SSE SseBroadcaster implementation not performing onClose / onError callbacks
     new c14369c  [CXF-7798] Make sure the exception/fault is mapped the same for the Async methods as compared to the normal methods
     new 4bfa2e8  Recording .gitmergeinfo Changes

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .gitmergeinfo                                      |  3 +
 .../java/org/apache/cxf/jaxws/DispatchImpl.java    | 12 ++-
 .../org/apache/cxf/jaxws/JaxWsClientProxy.java     | 85 +++++++++++++++-------
 .../org/apache/cxf/jaxws/JaxwsClientCallback.java  |  6 +-
 .../DispatchClientServerWithHugeResponseTest.java  |  9 ++-
 .../apache/cxf/systest/jaxws/ClientServerTest.java | 26 ++++++-
 .../hello_world_soap_http/BaseGreeterImpl.java     |  3 +
 7 files changed, 109 insertions(+), 35 deletions(-)


[cxf] 02/02: Recording .gitmergeinfo Changes

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 4bfa2e8ae94f7dcf0f7f12d29d843c4f48861a8a
Author: Daniel Kulp <dk...@apache.org>
AuthorDate: Mon Jul 23 19:24:05 2018 -0400

    Recording .gitmergeinfo Changes
---
 .gitmergeinfo | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/.gitmergeinfo b/.gitmergeinfo
index 78639d0..6bbedaa 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -1,4 +1,7 @@
 origin/master
+B 25e88017b49bde5a53bce8dab3ecc93aab6dd040
+B 4104641a4b731c72d66b1dace3d9ed4290226694
+B 468cf8f3cfe9ef8285cd2ae66caddf666b7aaf13
 B bb098089d18825ddc850fa82f4acee45e2b6ee7a
 B da5b01b32a59867b48e2b35a9281b3625f58d514
 B e9261069513b1947e16bf485182c328c07160e1c


[cxf] 01/02: [CXF-7798] Make sure the exception/fault is mapped the same for the Async methods as compared to the normal methods

Posted by dk...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dkulp pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit c14369cb53ec82912589bd1c71fb8045af5e5553
Author: Daniel Kulp <dk...@apache.org>
AuthorDate: Mon Jul 23 19:18:48 2018 -0400

    [CXF-7798] Make sure the exception/fault is mapped the same for the Async methods as compared to the normal methods
    
    (cherry picked from commit 2c237f7a5f6af5d6f789d74a26ccf126fee0a9c4)
---
 .../java/org/apache/cxf/jaxws/DispatchImpl.java    | 12 ++-
 .../org/apache/cxf/jaxws/JaxWsClientProxy.java     | 85 +++++++++++++++-------
 .../org/apache/cxf/jaxws/JaxwsClientCallback.java  |  6 +-
 .../DispatchClientServerWithHugeResponseTest.java  |  9 ++-
 .../apache/cxf/systest/jaxws/ClientServerTest.java | 26 ++++++-
 .../hello_world_soap_http/BaseGreeterImpl.java     |  3 +
 6 files changed, 106 insertions(+), 35 deletions(-)

diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
index 87e3ba2..f70eb77 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/DispatchImpl.java
@@ -422,7 +422,17 @@ public class DispatchImpl<T> implements Dispatch<T>, BindingProvider, Closeable
         checkError();
         client.setExecutor(getClient().getEndpoint().getExecutor());
 
-        ClientCallback callback = new JaxwsClientCallback<T>(asyncHandler, this);
+        ClientCallback callback = new JaxwsClientCallback<T>(asyncHandler, this) {
+            @Override
+            protected Throwable mapThrowable(Throwable t) {
+                if (t instanceof IOException) {
+                    return t;
+                } else if (t instanceof Exception) {
+                    t = mapException((Exception)t);
+                }
+                return t;
+            }
+        };            
 
         Response<T> ret = new JaxwsResponseCallback<T>(callback);
         try {
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
index 5048af1..ecd9f6c 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxWsClientProxy.java
@@ -61,6 +61,7 @@ import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.jaxws.support.JaxWsEndpointImpl;
 import org.apache.cxf.service.invoker.MethodDispatcher;
+import org.apache.cxf.service.model.BindingFaultInfo;
 import org.apache.cxf.service.model.BindingOperationInfo;
 
 public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implements
@@ -141,19 +142,52 @@ public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implem
         } catch (WebServiceException wex) {
             throw wex;
         } catch (Exception ex) {
+            throw mapException(method, oi, ex);
+        } finally {
+            if (addressChanged(address)) {
+                setupEndpointAddressContext(getClient().getEndpoint());
+            }
+        }
+
+        Map<String, Object> respContext = client.getResponseContext();
+        Map<String, Scope> scopes = CastUtils.cast((Map<?, ?>)respContext.get(WrappedMessageContext.SCOPES));
+        if (scopes != null) {
+            for (Map.Entry<String, Scope> scope : scopes.entrySet()) {
+                if (scope.getValue() == Scope.HANDLER) {
+                    respContext.remove(scope.getKey());
+                }
+            }
+        }
+        return adjustObject(result);
+    }
+    Exception mapException(Method method, BindingOperationInfo boi, Exception ex) {
+        if (method != null) {
             for (Class<?> excls : method.getExceptionTypes()) {
                 if (excls.isInstance(ex)) {
-                    throw ex;
+                    return ex;
                 }
             }
-            if (ex instanceof Fault && ex.getCause() instanceof IOException) {
-                throw new WebServiceException(ex.getMessage(), ex.getCause());
+        } else if (boi != null) {
+            for (BindingFaultInfo fi : boi.getFaults()) {
+                Class<?> c = fi.getFaultInfo().getProperty(Class.class.getName(), Class.class);
+                if (c != null && c.isInstance(ex)) {
+                    return ex;
+                }
             }
-            if (getBinding() instanceof HTTPBinding) {
-                HTTPException exception = new HTTPException(HttpURLConnection.HTTP_INTERNAL_ERROR);
-                exception.initCause(ex);
-                throw exception;
-            } else if (getBinding() instanceof SOAPBinding) {
+            if (ex instanceof IOException) {
+                return ex;
+            }
+        }
+        
+        if (ex instanceof Fault && ex.getCause() instanceof IOException) {
+            return new WebServiceException(ex.getMessage(), ex.getCause());
+        }
+        if (getBinding() instanceof HTTPBinding) {
+            HTTPException exception = new HTTPException(HttpURLConnection.HTTP_INTERNAL_ERROR);
+            exception.initCause(ex);
+            return exception;
+        } else if (getBinding() instanceof SOAPBinding) {
+            try {
                 SOAPFault soapFault = createSoapFault((SOAPBinding)getBinding(), ex);
                 if (soapFault == null) {
                     throw new WebServiceException(ex);
@@ -164,27 +198,14 @@ public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implem
                 } else {
                     exception.initCause(ex);
                 }
-                throw exception;
-            } else {
-                throw new WebServiceException(ex);
-            }
-        } finally {
-            if (addressChanged(address)) {
-                setupEndpointAddressContext(getClient().getEndpoint());
-            }
-        }
-
-        Map<String, Object> respContext = client.getResponseContext();
-        Map<String, Scope> scopes = CastUtils.cast((Map<?, ?>)respContext.get(WrappedMessageContext.SCOPES));
-        if (scopes != null) {
-            for (Map.Entry<String, Scope> scope : scopes.entrySet()) {
-                if (scope.getValue() == Scope.HANDLER) {
-                    respContext.remove(scope.getKey());
-                }
+                return exception;
+            } catch (SOAPException e) {
+                return new WebServiceException(ex);
             }
         }
-        return adjustObject(result);
+        return new WebServiceException(ex);
     }
+    
     boolean isAsync(Method m) {
         return m.getName().endsWith("Async")
             && (Future.class.equals(m.getReturnType())
@@ -277,7 +298,7 @@ public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implem
     }
 
     @SuppressWarnings("unchecked")
-    private Object invokeAsync(Method method, BindingOperationInfo oi, Object[] params) throws Exception {
+    private Object invokeAsync(Method method, final BindingOperationInfo oi, Object[] params) throws Exception {
 
         client.setExecutor(getClient().getEndpoint().getExecutor());
 
@@ -292,7 +313,15 @@ public class JaxWsClientProxy extends org.apache.cxf.frontend.ClientProxy implem
         } else {
             handler = null;
         }
-        ClientCallback callback = new JaxwsClientCallback<Object>(handler, this);
+        ClientCallback callback = new JaxwsClientCallback<Object>(handler, this) {
+            @Override
+            protected Throwable mapThrowable(Throwable t) {
+                if (t instanceof Exception) {
+                    t = mapException(null, oi, (Exception)t);
+                }
+                return t;
+            }
+        };
 
         Response<Object> ret = new JaxwsResponseCallback<Object>(callback);
         client.invoke(callback, oi, params);
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxwsClientCallback.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxwsClientCallback.java
index 2f0e6df..ceb1450 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxwsClientCallback.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/JaxwsClientCallback.java
@@ -82,7 +82,7 @@ class JaxwsClientCallback<T> extends ClientCallback {
     @Override
     public void handleException(Map<String, Object> ctx, final Throwable ex) {
         context = ctx;
-        exception = ex;
+        exception = mapThrowable(ex);
         if (handler != null) {
             handler.handleResponse(new Response<T>() {
 
@@ -120,4 +120,8 @@ class JaxwsClientCallback<T> extends ClientCallback {
             notifyAll();
         }
     }
+    
+    protected Throwable mapThrowable(Throwable t) {
+        return t;
+    }
 }
\ No newline at end of file
diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java
index b7fe91d..fbe926c 100644
--- a/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java
+++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java
@@ -33,6 +33,7 @@ import javax.xml.ws.Dispatch;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Response;
 import javax.xml.ws.Service;
+import javax.xml.ws.soap.SOAPFaultException;
 
 import org.apache.cxf.binding.soap.SoapFault;
 import org.apache.cxf.ext.logging.LoggingInInterceptor;
@@ -178,8 +179,8 @@ public class DispatchClientServerWithHugeResponseTest extends AbstractBusClientS
                 throw e;
             }
             Throwable t = e.getCause();
-            if (t instanceof SoapFault) {
-                SoapFault sf = (SoapFault)e.getCause();
+            if (t instanceof SOAPFaultException) {
+                SoapFault sf = (SoapFault)t.getCause();
                 if (sf.getCause() == null) {
                     throw e;
                 }
@@ -236,8 +237,8 @@ public class DispatchClientServerWithHugeResponseTest extends AbstractBusClientS
                 throw e;
             }
             Throwable t = e.getCause();
-            if (t instanceof SoapFault) {
-                SoapFault sf = (SoapFault)e.getCause();
+            if (t instanceof SOAPFaultException) {
+                SoapFault sf = (SoapFault)t.getCause();
                 if (sf.getCause() == null) {
                     throw e;
                 }
diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
index 76f9397..18cef94 100644
--- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
+++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java
@@ -48,6 +48,7 @@ import javax.xml.ws.Endpoint;
 import javax.xml.ws.Response;
 import javax.xml.ws.Service;
 import javax.xml.ws.WebServiceException;
+import javax.xml.ws.soap.SOAPFaultException;
 
 import org.w3c.dom.Document;
 
@@ -710,6 +711,7 @@ public class ClientServerTest extends AbstractBusClientServerTestBase {
 
         String noSuchCodeFault = "NoSuchCodeLitFault";
         String badRecordFault = "BadRecordLitFault";
+        String illegalArgumentException = "IllegalArgumentException";
 
         Greeter greeter = service.getPort(portName, Greeter.class);
         updateAddressPort(greeter, PORT);
@@ -721,6 +723,13 @@ public class ClientServerTest extends AbstractBusClientServerTestBase {
                 assertNotNull(nslf.getFaultInfo());
                 assertNotNull(nslf.getFaultInfo().getCode());
             }
+            try {
+                greeter.testDocLitFault(illegalArgumentException);
+                fail("Should have thrown SOAPFaultException exception");
+            } catch (SOAPFaultException sfe) {
+                assertEquals("TestIllegalArgumentException", sfe.getCause().getMessage());
+                sfe.printStackTrace();
+            }
 
             try {
                 greeter.testDocLitFault(badRecordFault);
@@ -735,9 +744,24 @@ public class ClientServerTest extends AbstractBusClientServerTestBase {
                 assertNotNull(brlf.getFaultInfo());
                 assertEquals("BadRecordLitFault", brlf.getFaultInfo());
             }
+            
+            try {
+                greeter.testDocLitFaultAsync(noSuchCodeFault).get();
+                fail("Should have thrown NoSuchCodeLitFault exception");
+            } catch (ExecutionException ee) {
+                NoSuchCodeLitFault nslf = (NoSuchCodeLitFault)ee.getCause();
+                assertNotNull(nslf.getFaultInfo());
+                assertNotNull(nslf.getFaultInfo().getCode());
+            }
 
+            try {
+                greeter.testDocLitFaultAsync(illegalArgumentException).get();
+                fail("Should have thrown SOAPFaultException exception");
+            } catch (ExecutionException ee) {
+                SOAPFaultException sfe = (SOAPFaultException)ee.getCause();
+                assertEquals("TestIllegalArgumentException", sfe.getCause().getMessage());
+            }
         }
-
     }
 
     @Test
diff --git a/testutils/src/main/java/org/apache/hello_world_soap_http/BaseGreeterImpl.java b/testutils/src/main/java/org/apache/hello_world_soap_http/BaseGreeterImpl.java
index a7a2a23..3cbdacd 100644
--- a/testutils/src/main/java/org/apache/hello_world_soap_http/BaseGreeterImpl.java
+++ b/testutils/src/main/java/org/apache/hello_world_soap_http/BaseGreeterImpl.java
@@ -111,6 +111,9 @@ public class BaseGreeterImpl implements Greeter {
             nscl.setCode(ec);
             throw new NoSuchCodeLitFault("TestNoSuchCodeLit", nscl);
         }
+        if ("IllegalArgumentException".equals(faultType)) {
+            throw new IllegalArgumentException("TestIllegalArgumentException");
+        }
         throw new RuntimeException("Unknown source", new IOException("dummy io exception"));
     }