You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by eg...@apache.org on 2008/11/24 21:53:09 UTC

svn commit: r720290 - in /cxf/branches/2.1.x-fixes: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/ systests/src/test/java/org/apache/cxf/systest/handlers/

Author: eglynn
Date: Mon Nov 24 12:53:09 2008
New Revision: 720290

URL: http://svn.apache.org/viewvc?rev=720290&view=rev
Log:
Better assertion in HandlerInvocationTest

Modified:
    cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultInInterceptor.java
    cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java
    cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
    cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java

Modified: cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultInInterceptor.java?rev=720290&r1=720289&r2=720290&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultInInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultInInterceptor.java Mon Nov 24 12:53:09 2008
@@ -41,12 +41,17 @@
     }
 
     public void handleMessage(SoapMessage message) throws Fault {
+        XMLStreamReader reader = message.getContent(XMLStreamReader.class);
+
+        message.setContent(Exception.class, unmarshalFault(message, reader));
+    }
+
+    public static SoapFault unmarshalFault(SoapMessage message, 
+                                           XMLStreamReader reader) {
         String exMessage = null;
         QName faultCode = null;
         String role = null;
         Element detail = null;
-
-        XMLStreamReader reader = message.getContent(XMLStreamReader.class);
         
         try {
             while (reader.nextTag() == XMLStreamReader.START_ELEMENT) {
@@ -70,8 +75,6 @@
         SoapFault fault = new SoapFault(exMessage, faultCode);
         fault.setDetail(detail);
         fault.setRole(role);
-
-        message.setContent(Exception.class, fault);
+        return fault;
     }
-
 }

Modified: cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java?rev=720290&r1=720289&r2=720290&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java Mon Nov 24 12:53:09 2008
@@ -50,6 +50,12 @@
     }
 
     public void handleMessage(SoapMessage message) throws Fault {
+        XMLStreamReader reader = message.getContent(XMLStreamReader.class);
+        message.setContent(Exception.class, unmarshalFault(message, reader));
+    }
+
+    public static SoapFault unmarshalFault(SoapMessage message, 
+                                           XMLStreamReader reader) {
         String exMessage = null;
         QName faultCode = null;
         QName subCode = null;
@@ -57,7 +63,6 @@
         String node = null;
         Element detail = null;
 
-        XMLStreamReader reader = message.getContent(XMLStreamReader.class);
         Map<String, String> ns = new HashMap<String, String>();
         ns.put("s", Soap12.SOAP_NAMESPACE);
         XPathUtils xu = new XPathUtils(ns);        
@@ -106,8 +111,7 @@
         fault.setDetail(detail);
         fault.setRole(role);
         fault.setNode(node);
-
-        message.setContent(Exception.class, fault);
+        return fault;
     }
 
 }

Modified: cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java?rev=720290&r1=720289&r2=720290&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java (original)
+++ cxf/branches/2.1.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java Mon Nov 24 12:53:09 2008
@@ -28,6 +28,7 @@
 import javax.xml.soap.MessageFactory;
 import javax.xml.soap.SOAPConstants;
 import javax.xml.soap.SOAPException;
+import javax.xml.soap.SOAPFault;
 import javax.xml.soap.SOAPHeader;
 import javax.xml.soap.SOAPMessage;
 import javax.xml.soap.SOAPPart;
@@ -45,6 +46,8 @@
 import org.apache.cxf.binding.soap.SoapHeader;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor;
+import org.apache.cxf.binding.soap.interceptor.Soap12FaultInInterceptor;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.databinding.DataBinding;
 import org.apache.cxf.headers.Header;
@@ -107,11 +110,38 @@
             }
             
             XMLStreamReader xmlReader = message.getContent(XMLStreamReader.class);
-            StaxUtils.readDocElements(soapMessage.getSOAPBody(), xmlReader, true);
-            DOMSource bodySource = new DOMSource(soapMessage.getSOAPPart().getEnvelope().getBody());
-            xmlReader = StaxUtils.createXMLStreamReader(bodySource);
-            xmlReader.nextTag();
-            xmlReader.nextTag(); // move past body tag
+
+            if (hasFault(message, xmlReader)) {
+                SOAPFault soapFault = 
+                    soapMessage.getSOAPPart().getEnvelope().getBody().addFault();
+                SoapFault fault = 
+                    message.getVersion() instanceof Soap11 
+                    ? Soap11FaultInInterceptor.unmarshalFault(message, xmlReader)
+                    : Soap12FaultInInterceptor.unmarshalFault(message, xmlReader);
+                if (fault.getFaultCode() != null) {
+                    soapFault.setFaultCode(fault.getFaultCode());
+                }
+                if (fault.getMessage() != null) {
+                    soapFault.setFaultString(fault.getMessage());
+                }
+                if (fault.getRole() != null) {
+                    soapFault.setFaultActor(fault.getRole());
+                }
+                if (fault.getDetail() != null) {
+                    soapFault.addDetail().appendChild(
+                        soapMessage.getSOAPPart().importNode(
+                            fault.getDetail().getFirstChild(), true));
+                }
+
+                DOMSource bodySource = new DOMSource(soapFault);
+                xmlReader = StaxUtils.createXMLStreamReader(bodySource);
+            } else { 
+                StaxUtils.readDocElements(soapMessage.getSOAPBody(), xmlReader, true);
+                DOMSource bodySource = new DOMSource(soapMessage.getSOAPPart().getEnvelope().getBody());
+                xmlReader = StaxUtils.createXMLStreamReader(bodySource);
+                xmlReader.nextTag();
+                xmlReader.nextTag(); // move past body tag
+            }
             message.setContent(XMLStreamReader.class, xmlReader);           
         } catch (SOAPException soape) {
             throw new SoapFault(new org.apache.cxf.common.i18n.Message(
@@ -170,4 +200,14 @@
         }
     }
 
+
+    private static boolean hasFault(SoapMessage message, 
+                                    XMLStreamReader xmlReader) {
+        try {
+            QName name = xmlReader.getName();
+            return message.getVersion().getFault().equals(name);
+        } catch (Exception e) {
+            return false;
+        }
+    }
 }

Modified: cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java?rev=720290&r1=720289&r2=720290&view=diff
==============================================================================
--- cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java (original)
+++ cxf/branches/2.1.x-fixes/systests/src/test/java/org/apache/cxf/systest/handlers/HandlerInvocationTest.java Mon Nov 24 12:53:09 2008
@@ -967,10 +967,10 @@
                     if (!outbound) {
                         LogicalMessage msg = ctx.getMessage();
                         String payload = convertDOMToString(msg.getPayload());
-                        assertTrue(payload.indexOf(
-                            "<faultstring>"
-                            + "servant throws SOAPFaultException"
-                            + "</faultstring>") > -1);
+                        assertTrue("expected faultstring in: " + payload,
+                            payload.indexOf(
+                                "servant throws SOAPFaultException"
+                                + "</faultstring>") > -1);
                     }
                 } catch (Exception e) {
                     e.printStackTrace();