Author: jliu
Date: Tue May 15 21:20:40 2007
New Revision: 538431

URL: http://svn.apache.org/viewvc?view=rev&rev=538431
Log:
Support JAX-WS handlers throw Protocol/Runtime exception on server side 
outbound.

Modified:
    
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultOutInterceptor.java
    
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
    
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestSOAPHandler.java

Modified: 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultOutInterceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultOutInterceptor.java?view=diff&rev=538431&r1=538430&r2=538431
==============================================================================
--- 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultOutInterceptor.java
 (original)
+++ 
incubator/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPHandlerFaultOutInterceptor.java
 Tue May 15 21:20:40 2007
@@ -24,6 +24,7 @@
 import java.util.Set;
 
 import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPMessage;
 import javax.xml.ws.Binding;
 import javax.xml.ws.ProtocolException;
 import javax.xml.ws.handler.Handler;
@@ -82,6 +83,9 @@
         }
 
         if (getInvoker(message).isOutbound()) {
+            //The SOAPMessage might be set from the outchain, in this case, 
+            //we need to clean it up and create a new SOAPMessage dedicated to 
fault.
+            message.setContent(SOAPMessage.class, null);
 
             SAAJ_OUT.handleMessage(message);
 

Modified: 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java?view=diff&rev=538431&r1=538430&r2=538431
==============================================================================
--- 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
 (original)
+++ 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
 Tue May 15 21:20:40 2007
@@ -719,10 +719,31 @@
             handlerTest.pingWithArgs("soapHandler3 inbound throw 
RuntimeException");
             fail("did not get expected exception");
         } catch (RuntimeException e) {
-            //FIXME
+/*            e.printStackTrace();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            PrintStream ps = new PrintStream(baos, true);
+            e.printStackTrace(ps);
+            assertTrue("Did not get expected exception message",  
baos.toString()
+                .indexOf("HandleMessage throws RuntimeException exception") > 
-1);
+            assertTrue("Did not get expected 
javax.xml.ws.soap.SOAPFaultException", baos.toString()
+                .indexOf("javax.xml.ws.soap.SOAPFaultException") > -1);*/
+        }        
+    }
+    
+    @Test
+    public void 
testSOAPHandlerHandleMessageThrowsRuntimeExceptionServerOutbound() throws 
PingException {
+        try {
+            handlerTest.pingWithArgs("soapHandler3 outbound throw 
RuntimeException");
+            fail("did not get expected exception");
+        } catch (RuntimeException e) {
             //e.printStackTrace();
-/*            assertTrue("Did not get expected exception message", 
e.getMessage()
-                .indexOf("HandleMessage throws runtime exception") > -1);*/
+/*            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            PrintStream ps = new PrintStream(baos, true);
+            e.printStackTrace(ps);
+            assertTrue("Did not get expected exception message",  
baos.toString()
+                .indexOf("HandleMessage throws RuntimeException exception") > 
-1);
+            assertTrue("Did not get expected 
javax.xml.ws.soap.SOAPFaultException", baos.toString()
+                .indexOf("javax.xml.ws.soap.SOAPFaultException") > -1);*/
         }        
     }
     
@@ -732,17 +753,34 @@
             handlerTest.pingWithArgs("soapHandler3 inbound throw 
ProtocolException");
             fail("did not get expected WebServiceException");
         } catch (WebServiceException e) {
-            //FIXME
-/*            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+/*            e.printStackTrace();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
             PrintStream ps = new PrintStream(baos, true);
             e.printStackTrace(ps);
             assertTrue("Did not get expected exception message",  
baos.toString()
-                .indexOf("HandleMessage throws runtime exception") > -1);
+                .indexOf("HandleMessage throws ProtocolException exception") > 
-1);
             assertTrue("Did not get expected 
javax.xml.ws.soap.SOAPFaultException", baos.toString()
                 .indexOf("javax.xml.ws.soap.SOAPFaultException") > -1);*/
         }        
     }
 
+    @Test
+    public void 
testSOAPHandlerHandleMessageThrowsProtocolExceptionServerOutbound() throws 
PingException {
+        try {
+            handlerTest.pingWithArgs("soapHandler3 outbound throw 
ProtocolException");
+            fail("did not get expected WebServiceException");
+        } catch (WebServiceException e) {
+/*            e.printStackTrace();
+            ByteArrayOutputStream baos = new ByteArrayOutputStream();
+            PrintStream ps = new PrintStream(baos, true);
+            e.printStackTrace(ps);
+            assertTrue("Did not get expected exception message",  
baos.toString()
+                .indexOf("HandleMessage throws ProtocolException exception") > 
-1);
+            assertTrue("Did not get expected 
javax.xml.ws.soap.SOAPFaultException", baos.toString()
+                .indexOf("javax.xml.ws.soap.SOAPFaultException") > -1);*/
+        }        
+    }
+    
     @Test
     @Ignore
     public void 
testLogicalHandlerHandleMessageThrowsProtocolExceptionServerInbound()

Modified: 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestSOAPHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestSOAPHandler.java?view=diff&rev=538431&r1=538430&r2=538431
==============================================================================
--- 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestSOAPHandler.java
 (original)
+++ 
incubator/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/handlers/TestSOAPHandler.java
 Tue May 15 21:20:40 2007
@@ -196,13 +196,13 @@
                 }
                 if (exceptionType != null && !outbound && 
"inbound".equals(direction)) {
                     if ("RuntimeException".equals(exceptionType)) {
-                        throw new RuntimeException("HandleMessage throws 
runtime exception");
+                        throw new RuntimeException("HandleMessage throws 
RuntimeException exception");
                     } else if ("ProtocolException".equals(exceptionType)) {
-                        throw new ProtocolException("HandleMessage throws 
runtime exception");
+                        throw new ProtocolException("HandleMessage throws 
ProtocolException exception");
                     }
                 } else if (exceptionType != null && outbound && 
"outbound".equals(direction)) {
                     if ("RuntimeException".equals(exceptionType)) {
-                        throw new RuntimeException("HandleMessage throws 
ProtocolException exception");
+                        throw new RuntimeException("HandleMessage throws 
RuntimeException exception");
                     } else if ("ProtocolException".equals(exceptionType)) {
                         throw new ProtocolException("HandleMessage throws 
ProtocolException exception");
                     }


Reply via email to