You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ff...@apache.org on 2010/11/18 12:08:52 UTC

svn commit: r1036405 - in /cxf/branches/2.2.x-fixes: ./ rt/core/src/main/java/org/apache/cxf/endpoint/ systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/ systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/resources/

Author: ffang
Date: Thu Nov 18 11:08:52 2010
New Revision: 1036405

URL: http://svn.apache.org/viewvc?rev=1036405&view=rev
Log:
Merged revisions 1036401 via svnmerge from 
https://svn.apache.org/repos/asf/cxf/branches/2.3.x-fixes

................
  r1036401 | ffang | 2010-11-18 19:00:21 +0800 (四, 18 11 2010) | 9 lines
  
  Merged revisions 1036397 via svnmerge from 
  https://svn.apache.org/repos/asf/cxf/trunk
  
  ........
    r1036397 | ffang | 2010-11-18 18:53:33 +0800 (四, 18 11 2010) | 1 line
    
    [CXF-3132]asynchronous client can't get correct error if non-runtimeexcpetion happen
  ........
................

Added:
    cxf/branches/2.2.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java
      - copied unchanged from r1036401, cxf/branches/2.3.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerWithHugeResponseTest.java
    cxf/branches/2.2.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/HugeResponseInterceptor.java
      - copied unchanged from r1036401, cxf/branches/2.3.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/HugeResponseInterceptor.java
    cxf/branches/2.2.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/resources/stack_overflow_rs.xml
      - copied unchanged from r1036401, cxf/branches/2.3.x-fixes/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/resources/stack_overflow_rs.xml
Modified:
    cxf/branches/2.2.x-fixes/   (props changed)
    cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java

Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java?rev=1036405&r1=1036404&r2=1036405&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java (original)
+++ cxf/branches/2.2.x-fixes/rt/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java Thu Nov 18 11:08:52 2010
@@ -730,7 +730,31 @@ public class ClientImpl
             } else if (message.getContent(Exception.class) != null) {
                 outFaultObserver.onMessage(message);
             } else {
-                chain.doIntercept(message);
+                callback = message.getExchange().get(ClientCallback.class);
+
+                if (callback != null && !isPartialResponse(message)) {
+                    try {
+                        chain.doIntercept(message);
+                    } catch (Throwable error) {
+                        //so that asyn callback handler get chance to 
+                        //handle non-runtime exceptions
+                        message.getExchange().setInMessage(message);
+                        Map<String, Object> resCtx = CastUtils
+                                .cast((Map<?, ?>) message.getExchange()
+                                        .getOutMessage().get(
+                                                Message.INVOCATION_CONTEXT));
+                        resCtx = CastUtils.cast((Map<?, ?>) resCtx
+                                .get(RESPONSE_CONTEXT));
+                        if (resCtx != null) {
+                            responseContext.put(Thread.currentThread(), resCtx);
+                        }
+                        callback.handleException(resCtx, error);
+
+                    }
+                } else {
+                    chain.doIntercept(message);
+                }
+                 
             }
 
             callback = message.getExchange().get(ClientCallback.class);