Author: ema
Date: Fri Dec 17 06:04:51 2010
New Revision: 1050280
URL: http://svn.apache.org/viewvc?rev=1050280&view=rev
Log:
[CXF-3199]:Set the wsa action and remove the not understood soap headers in
OneWayDecoupledFaultHandler
Modified:
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java
Modified:
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java?rev=1050280&r1=1050279&r2=1050280&view=diff
==============================================================================
---
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java
(original)
+++
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandler.java
Fri Dec 17 06:04:51 2010
@@ -19,8 +19,11 @@
package org.apache.cxf.ws.addressing.soap;
+import java.util.Iterator;
+
import org.apache.cxf.binding.soap.SoapMessage;
import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.headers.Header;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.Phase;
@@ -28,6 +31,7 @@ import org.apache.cxf.transport.Destinat
import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
import org.apache.cxf.ws.addressing.ContextUtils;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.ws.addressing.Names;
/**
* Utility interceptor for dealing with faults occurred during processing
@@ -38,6 +42,8 @@ import org.apache.cxf.ws.addressing.Endp
* annotations or explicitly added to the list of interceptors.
*/
public class OneWayDecoupledFaultHandler extends AbstractSoapInterceptor {
+
+ public static final String WSA_ACTION =
"http://schemas.xmlsoap.org/wsdl/soap/envelope/fault";
public OneWayDecoupledFaultHandler() {
super(Phase.PRE_PROTOCOL);
@@ -61,9 +67,18 @@ public class OneWayDecoupledFaultHandler
ContextUtils.retrieveMAPs(inMessage, false, false, true);
if (maps != null &&
!ContextUtils.isGenericAddress(maps.getFaultTo())) {
+ //Just keep the wsa headers to remove the not understand
headers
+ Iterator<Header> iterator = message.getHeaders().iterator();
+ while (iterator.hasNext()) {
+ Header header = iterator.next();
+ if (!isWSAHeader(header)) {
+ iterator.remove();
+ }
+ }
exchange.setOneWay(false);
exchange.setOutMessage(message);
-
+ //manually set the action
+ message.put(ContextUtils.ACTION, WSA_ACTION);
Destination destination = createDecoupledDestination(
exchange, maps.getFaultTo());
exchange.setDestination(destination);
@@ -75,4 +90,11 @@ public class OneWayDecoupledFaultHandler
protected Destination createDecoupledDestination(Exchange exchange,
EndpointReferenceType epr) {
return ContextUtils.createDecoupledDestination(exchange, epr);
}
+
+ private boolean isWSAHeader(Header header) {
+ if
(header.getName().getNamespaceURI().startsWith(Names.WSA_NAMESPACE_NAME)) {
+ return true;
+ }
+ return false;
+ }
}
Modified:
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java?rev=1050280&r1=1050279&r2=1050280&view=diff
==============================================================================
---
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java
(original)
+++
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/soap/OneWayDecoupledFaultHandlerTest.java
Fri Dec 17 06:04:51 2010
@@ -18,7 +18,10 @@
*/
package org.apache.cxf.ws.addressing.soap;
+import javax.xml.namespace.QName;
+
import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.headers.Header;
import org.apache.cxf.message.Exchange;
import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.MessageImpl;
@@ -29,7 +32,6 @@ import org.apache.cxf.ws.addressing.Attr
import org.apache.cxf.ws.addressing.ContextUtils;
import org.apache.cxf.ws.addressing.EndpointReferenceType;
import org.easymock.EasyMock;
-
import org.junit.Assert;
import org.junit.Test;
@@ -45,7 +47,8 @@ public class OneWayDecoupledFaultHandler
};
SoapMessage message = new SoapMessage(new MessageImpl());
-
+ QName qname = new QName("http://cxf.apache.org/mustunderstand",
"TestMU");
+ message.getHeaders().add(new Header(qname, new Object()));
AddressingProperties maps = new AddressingPropertiesImpl();
EndpointReferenceType faultTo = new EndpointReferenceType();
@@ -61,7 +64,7 @@ public class OneWayDecoupledFaultHandler
exchange.setOneWay(true);
handler.handleFault(message);
-
+ assertTrue(message.getHeaders().isEmpty());
assertFalse(exchange.isOneWay());
assertSame(message, exchange.getOutMessage());
assertNotNull(exchange.getDestination());