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 2012/03/29 20:50:49 UTC

svn commit: r1307045 - in /cxf/branches/2.5.x-fixes/rt/bindings/soap/src: main/java/org/apache/cxf/binding/soap/interceptor/ main/java/org/apache/cxf/binding/soap/saaj/ test/java/org/apache/cxf/binding/soap/interceptor/

Author: dkulp
Date: Thu Mar 29 18:50:48 2012
New Revision: 1307045

URL: http://svn.apache.org/viewvc?rev=1307045&view=rev
Log:
Merged revisions 1307039 via  git cherry-pick from
https://svn.apache.org/repos/asf/cxf/trunk

........
  r1307039 | dkulp | 2012-03-29 14:41:12 -0400 (Thu, 29 Mar 2012) | 3 lines

  [CXF-4181] More work with getting the fault details "correct" along with
  fixing some prefix issues with SAAJ implementations.

........

Modified:
    cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
    cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java
    cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java
    cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
    cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/cxf4181.xml

Modified: cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java?rev=1307045&r1=1307044&r2=1307045&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/ReadHeadersInterceptor.java Thu Mar 29 18:50:48 2012
@@ -193,7 +193,7 @@ public class ReadHeadersInterceptor exte
                             }
                         }
                         
-                        HeaderProcessor p = bus.getExtension(HeaderManager.class)
+                        HeaderProcessor p = bus == null ? null : bus.getExtension(HeaderManager.class)
                             .getHeaderProcessor(hel.getNamespaceURI());
 
                         Object obj;

Modified: cxf/branches/2.5.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.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java?rev=1307045&r1=1307044&r2=1307045&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultInInterceptor.java Thu Mar 29 18:50:48 2012
@@ -41,6 +41,7 @@ import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.phase.Phase;
 import org.apache.cxf.staxutils.FragmentStreamReader;
 import org.apache.cxf.staxutils.StaxUtils;
+import org.apache.cxf.staxutils.W3CDOMStreamReader;
 
 public class Soap12FaultInInterceptor extends AbstractSoapInterceptor {
     
@@ -72,9 +73,13 @@ public class Soap12FaultInInterceptor ex
         XPathUtils xu = new XPathUtils(ns);        
         try {
             Node mainNode = message.getContent(Node.class);
-            
             Node fault = null;
-            if (mainNode != null) {
+            
+            if (reader instanceof W3CDOMStreamReader) {
+                W3CDOMStreamReader dr = (W3CDOMStreamReader)reader;
+                fault = dr.getCurrentElement();
+                dr.consumeFrame();
+            } else if (mainNode != null) {
                 Node bodyNode = (Node) xu.getValue("//s:Body",
                                                    mainNode,
                                                    XPathConstants.NODE);

Modified: cxf/branches/2.5.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.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java?rev=1307045&r1=1307044&r2=1307045&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/saaj/SAAJInInterceptor.java Thu Mar 29 18:50:48 2012
@@ -286,7 +286,7 @@ public class SAAJInInterceptor extends A
         }
         Element elem = DOMUtils.getFirstElement(header);
         while (elem != null) {
-            Bus b = message.getExchange().get(Bus.class);
+            Bus b = message.getExchange() == null ? null : message.getExchange().get(Bus.class);
             HeaderProcessor p =  null;
             if (b != null && b.getExtension(HeaderManager.class) != null) {
                 p = b.getExtension(HeaderManager.class).getHeaderProcessor(elem.getNamespaceURI());

Modified: cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java?rev=1307045&r1=1307044&r2=1307045&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/SoapFaultSerializerTest.java Thu Mar 29 18:50:48 2012
@@ -23,10 +23,14 @@ import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 
 import javax.xml.namespace.QName;
+import javax.xml.soap.SOAPFault;
+import javax.xml.soap.SOAPPart;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 
 import org.apache.cxf.binding.soap.Soap11;
 import org.apache.cxf.binding.soap.Soap12;
@@ -34,6 +38,8 @@ import org.apache.cxf.binding.soap.SoapF
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.interceptor.Soap11FaultOutInterceptor.Soap11FaultOutInterceptorInternal;
 import org.apache.cxf.binding.soap.interceptor.Soap12FaultOutInterceptor.Soap12FaultOutInterceptorInternal;
+import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
+import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor.SAAJPreInInterceptor;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.message.ExchangeImpl;
@@ -180,25 +186,69 @@ public class SoapFaultSerializerTest ext
 
     @Test
     public void testCXF4181() throws Exception {
-
+        //Try WITH SAAJ
         SoapMessage m = new SoapMessage(new MessageImpl());
         m.setVersion(Soap12.getInstance());        
-
-
         XMLStreamReader reader = StaxUtils.createXMLStreamReader(this.getClass()
                                                                  .getResourceAsStream("cxf4181.xml"));
 
         m.setContent(XMLStreamReader.class, reader);
 
+        new SAAJPreInInterceptor().handleMessage(m);
         new ReadHeadersInterceptor(null).handleMessage(m);
-        Soap12FaultInInterceptor inInterceptor = new Soap12FaultInInterceptor();
-        inInterceptor.handleMessage(m);
-
+        new StartBodyInterceptor().handleMessage(m);
+        new SAAJInInterceptor().handleMessage(m);
+        new Soap12FaultInInterceptor().handleMessage(m);
+
+        Node nd = m.getContent(Node.class);
+        
+        SOAPPart part = (SOAPPart)nd;
+        assertEquals("S", part.getEnvelope().getPrefix());
+        assertEquals("S2", part.getEnvelope().getHeader().getPrefix());
+        assertEquals("S3", part.getEnvelope().getBody().getPrefix());
+        SOAPFault fault = part.getEnvelope().getBody().getFault();
+        assertEquals("S", fault.getPrefix());
+        
+        assertEquals("Authentication Failure", fault.getFaultString());
+        
         SoapFault fault2 = (SoapFault)m.getContent(Exception.class);
         assertNotNull(fault2);
         
         assertEquals(Soap12.getInstance().getSender(), fault2.getFaultCode());
         assertEquals(new QName("http://schemas.xmlsoap.org/ws/2005/02/trust", "FailedAuthentication"), 
                      fault2.getSubCode());
+        
+        Element el = part.getEnvelope().getBody();
+        nd = el.getFirstChild();
+        int count = 0;
+        while (nd != null) {
+            if (nd instanceof Element) {
+                count++;
+            }
+            nd = nd.getNextSibling();
+        }
+        assertEquals(1, count);
+        
+        
+        //Try WITHOUT SAAJ
+        m = new SoapMessage(new MessageImpl());
+        m.setVersion(Soap12.getInstance());  
+        reader = StaxUtils.createXMLStreamReader(this.getClass()
+                                                 .getResourceAsStream("cxf4181.xml"));
+
+        m.setContent(XMLStreamReader.class, reader);
+
+        new ReadHeadersInterceptor(null).handleMessage(m);
+        new StartBodyInterceptor().handleMessage(m);
+        new Soap12FaultInInterceptor().handleMessage(m);
+
+        nd = m.getContent(Node.class);
+
+        fault2 = (SoapFault)m.getContent(Exception.class);
+        assertNotNull(fault2);
+
+        assertEquals(Soap12.getInstance().getSender(), fault2.getFaultCode());
+        assertEquals(new QName("http://schemas.xmlsoap.org/ws/2005/02/trust", "FailedAuthentication"), 
+             fault2.getSubCode());
     }
 }

Modified: cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/cxf4181.xml
URL: http://svn.apache.org/viewvc/cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/cxf4181.xml?rev=1307045&r1=1307044&r2=1307045&view=diff
==============================================================================
--- cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/cxf4181.xml (original)
+++ cxf/branches/2.5.x-fixes/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/interceptor/cxf4181.xml Thu Mar 29 18:50:48 2012
@@ -2,7 +2,10 @@
             xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
             xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" 
             xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust">
-  <S:Body>
+  <S2:Header xmlns:S2="http://www.w3.org/2003/05/soap-envelope">
+     <foo:blah xmlns:foo="http://cxf.apache.org/test">Snarf</foo:blah>
+  </S2:Header>
+  <S3:Body xmlns:S3="http://www.w3.org/2003/05/soap-envelope">
     <S:Fault>
       <S:Code>
         <S:Value>S:Sender</S:Value>
@@ -14,5 +17,5 @@
         <S:Text xml:lang="en-US">Authentication Failure</S:Text>
       </S:Reason>
     </S:Fault>
-  </S:Body>
+  </S3:Body>
 </S:Envelope>