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 2011/01/17 20:52:46 UTC

svn commit: r1060059 - in /cxf/trunk: api/src/main/java/org/apache/cxf/phase/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ systests/ws-specs/src/test/resources/wsdl_systest_wsspec/

Author: dkulp
Date: Mon Jan 17 19:52:45 2011
New Revision: 1060059

URL: http://svn.apache.org/viewvc?rev=1060059&view=rev
Log:
[CXF-3188] Make sure the mustUnderstand fault is sent back
to the client even if there is a problem in the body.

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
    cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java?rev=1060059&r1=1060058&r2=1060059&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java Mon Jan 17 19:52:45 2011
@@ -285,25 +285,29 @@ public class PhaseInterceptorChain imple
                                 description.append("\' ");
                             }
                         }
+                        
+                        message.setContent(Exception.class, ex);
+                        unwind(message);
+                        Exception ex2 = message.getContent(Exception.class);
+                        if (ex2 == null) {
+                            ex2 = ex;
+                        }
 
                         FaultListener flogger = (FaultListener)
                                 message.getContextualProperty(FaultListener.class.getName());
                         boolean useDefaultLogging = true;
                         if (flogger != null) {
-                            useDefaultLogging = flogger.faultOccurred(ex, description.toString(), message);
+                            useDefaultLogging = flogger.faultOccurred(ex2, description.toString(), message);
                         }
                         if (useDefaultLogging) {
-                            doDefaultLogging(message, ex, description);
+                            doDefaultLogging(message, ex2, description);
                         }
 
     
-                        message.setContent(Exception.class, ex);
-                                            
-                        unwind(message);
                         
                         boolean isOneWay = false;
                         if (message.getExchange() != null) {
-                            message.getExchange().put(Exception.class, ex);
+                            message.getExchange().put(Exception.class, ex2);
                             isOneWay = message.getExchange().isOneWay();
                         }
                         
@@ -324,7 +328,7 @@ public class PhaseInterceptorChain imple
         }
     }
 
-    private void doDefaultLogging(Message message, RuntimeException ex, StringBuilder description) {
+    private void doDefaultLogging(Message message, Exception ex, StringBuilder description) {
         FaultMode mode = message.get(FaultMode.class);
         if (mode == FaultMode.CHECKED_APPLICATION_FAULT) {
             if (isFineLogging) {

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java?rev=1060059&r1=1060058&r2=1060059&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/MustUnderstandInterceptor.java Mon Jan 17 19:52:45 2011
@@ -96,6 +96,16 @@ public class MustUnderstandInterceptor e
             checkUltimateReceiverHeaders(ultimateReceiverHeaders, mustUnderstandQNames, soapMessage);
         }
     }
+    public void handleFault(SoapMessage message) {
+        SoapFault soapFault = (SoapFault)message.get(MustUnderstandInterceptor.FAULT);
+        if (soapFault != null
+            && !message.getExchange().isOneWay()
+            && soapFault != message.getContent(Exception.class)) {
+            
+            message.setContent(Exception.class, soapFault);
+        }
+    }
+
 
     private void checkUltimateReceiverHeaders(Set<Header> ultimateReceiverHeaders,
                                               Set<QName> mustUnderstandQNames, 

Modified: cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl?rev=1060059&r1=1060058&r2=1060059&view=diff
==============================================================================
--- cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl (original)
+++ cxf/trunk/systests/ws-specs/src/test/resources/wsdl_systest_wsspec/DoubleIt.wsdl Mon Jan 17 19:52:45 2011
@@ -500,7 +500,7 @@
 						</sp:AlgorithmSuite>
 						<sp:Layout>
 							<wsp:Policy>
-								<sp:Lax />XPath
+								<sp:Lax />
 							</wsp:Policy>
 						</sp:Layout>
 						<sp:IncludeTimestamp />