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>