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 2013/08/08 17:48:32 UTC

svn commit: r1511840 - in /cxf/trunk: api/src/main/java/org/apache/cxf/phase/ rt/core/src/main/java/org/apache/cxf/bus/managers/ systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/

Author: dkulp
Date: Thu Aug  8 15:48:32 2013
New Revision: 1511840

URL: http://svn.apache.org/r1511840
Log:
[CXF-5190] Fix issues with faults between oneWay being set and robust being handled.
Add some pre/post unmarshall phases for consistency

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
    cxf/trunk/api/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/managers/PhaseManagerImpl.java
    cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java?rev=1511840&r1=1511839&r2=1511840&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/phase/Phase.java Thu Aug  8 15:48:32 2013
@@ -58,7 +58,9 @@ public class Phase implements Comparable
     public static final String RECEIVE = "receive";
     public static final String READ = "read";
     public static final String PROTOCOL = "protocol";
+    public static final String PRE_UNMARSHAL = "pre-unmarshal";
     public static final String UNMARSHAL = "unmarshal";
+    public static final String POST_UNMARSHAL = "post-unmarshal";
     public static final String PRE_INVOKE = "pre-invoke";
     public static final String INVOKE = "invoke";
     public static final String POST_INVOKE = "post-invoke";

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=1511840&r1=1511839&r2=1511840&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 Thu Aug  8 15:48:32 2013
@@ -41,6 +41,7 @@ import org.apache.cxf.logging.FaultListe
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.FaultMode;
 import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageUtils;
 import org.apache.cxf.service.Service;
 import org.apache.cxf.service.model.OperationInfo;
 import org.apache.cxf.transport.MessageObserver;
@@ -324,7 +325,8 @@ public class PhaseInterceptorChain imple
                             if (message.getContent(Exception.class) != null) {
                                 message.getExchange().put(Exception.class, ex2);
                             }
-                            isOneWay = message.getExchange().isOneWay();
+                            isOneWay = message.getExchange().isOneWay() 
+                                && !MessageUtils.isTrue(message.getContextualProperty(Message.ROBUST_ONEWAY));
                         }
                         
                         if (faultObserver != null && !isOneWay) {

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/managers/PhaseManagerImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/managers/PhaseManagerImpl.java?rev=1511840&r1=1511839&r2=1511840&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/managers/PhaseManagerImpl.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/bus/managers/PhaseManagerImpl.java Thu Aug  8 15:48:32 2013
@@ -69,7 +69,9 @@ public class PhaseManagerImpl implements
         inPhases.add(new Phase(Phase.USER_PROTOCOL, ++i * 1000));
         inPhases.add(new Phase(Phase.PROTOCOL, ++i * 1000));
         inPhases.add(new Phase(Phase.POST_PROTOCOL, ++i * 1000));
+        inPhases.add(new Phase(Phase.PRE_UNMARSHAL, ++i * 1000));
         inPhases.add(new Phase(Phase.UNMARSHAL, ++i * 1000));
+        inPhases.add(new Phase(Phase.POST_UNMARSHAL, ++i * 1000));
         inPhases.add(new Phase(Phase.PRE_LOGICAL, ++i * 1000));
         inPhases.add(new Phase(Phase.USER_LOGICAL, ++i * 1000));
         inPhases.add(new Phase(Phase.POST_LOGICAL, ++i * 1000));

Modified: cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java?rev=1511840&r1=1511839&r2=1511840&view=diff
==============================================================================
--- cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java (original)
+++ cxf/trunk/systests/uncategorized/src/test/java/org/apache/cxf/systest/interceptor/InterceptorFaultTest.java Thu Aug  8 15:48:32 2013
@@ -127,7 +127,7 @@ public class InterceptorFaultTest extend
     private Greeter greeter;
     private List<Phase> inPhases;
     private PhaseComparator comparator;
-    private Phase preLogicalPhase;
+    private Phase postUnMarshalPhase;
     
     
 
@@ -211,7 +211,7 @@ public class InterceptorFaultTest extend
         // all interceptors pass
         testInterceptorsPass(robust);
         
-        // test failure in phases before Phase.PRE_LOGICAL
+        // test failure in phases <= Phase.UNMARSHALL
         FaultLocation location = new org.apache.cxf.greeter_control.types.ObjectFactory()
             .createFaultLocation();
         location.setAfter(MAPAggregator.class.getName());
@@ -226,9 +226,7 @@ public class InterceptorFaultTest extend
         throws PingMeFault {
         for (Phase p : phases) {
             location.setPhase(p.getName());
-            if (Phase.PRE_LOGICAL.equals(p.getName())) {
-                continue;
-            } else if (Phase.POST_INVOKE.equals(p.getName())) {
+            if (Phase.POST_INVOKE.equals(p.getName())) {
                 break;
             }   
             testFail(location, true, robust);
@@ -265,8 +263,10 @@ public class InterceptorFaultTest extend
 
         // oneway reports a plain fault (although server sends a soap fault)
 
-        boolean expectOnewayFault = robust 
-            || comparator.compare(preLogicalPhase, getPhase(location.getPhase())) > 0;
+        boolean expectOnewayFault = robust;
+        if (comparator.compare(getPhase(location.getPhase()), postUnMarshalPhase) < 0) {
+            expectOnewayFault = true;
+        }
         
         try {
             greeter.greetMeOneWay("oneway");
@@ -331,8 +331,8 @@ public class InterceptorFaultTest extend
             inPhases.addAll(greeterBus.getExtension(PhaseManager.class).getInPhases());
             Collections.sort(inPhases, comparator);
         }        
-        if (null == preLogicalPhase) {
-            preLogicalPhase = getPhase(Phase.PRE_LOGICAL);
+        if (null == postUnMarshalPhase) {
+            postUnMarshalPhase = getPhase(Phase.POST_UNMARSHAL);
         }
        
         GreeterService gs = new GreeterService();