You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2010/09/04 23:37:46 UTC
svn commit: r992686 - in /cxf/trunk/rt/ws/addr/src:
main/java/org/apache/cxf/ws/addressing/ContextUtils.java
main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Author: sergeyb
Date: Sat Sep 4 21:37:46 2010
New Revision: 992686
URL: http://svn.apache.org/viewvc?rev=992686&view=rev
Log:
[CXF-2972] Returning a fault when ReplyTo EPR address is none
Modified:
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
Modified: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java?rev=992686&r1=992685&r2=992686&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/ContextUtils.java Sat Sep 4 21:37:46 2010
@@ -322,6 +322,18 @@ public final class ContextUtils {
|| Names.WSA_ANONYMOUS_ADDRESS.equals(ref.getAddress().getValue())
|| Names.WSA_NONE_ADDRESS.equals(ref.getAddress().getValue());
}
+
+ /**
+ * Helper method to determine if an EPR address is none.
+ *
+ * @param ref the EPR under test
+ * @return true if the address is generic
+ */
+ public static boolean isNoneAddress(EndpointReferenceType ref) {
+ return ref != null
+ && ref.getAddress() != null
+ && Names.WSA_NONE_ADDRESS.equals(ref.getAddress().getValue());
+ }
/**
* Helper method to determine if an MAPs Action is empty (a null action
Modified: cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java?rev=992686&r1=992685&r2=992686&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java (original)
+++ cxf/trunk/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/MAPAggregator.java Sat Sep 4 21:37:46 2010
@@ -537,10 +537,16 @@ public class MAPAggregator extends Abstr
message);
}
if (!isOneway) {
- // ensure the inbound MAPs are available in both the full & fault
- // response messages (used to determine relatesTo etc.)
- ContextUtils.propogateReceivedMAPs(maps,
+ // if ReplyTo address is none then 202 response status is expected
+ // However returning a fault is more appropriate for request-response MEP
+ if (ContextUtils.isNoneAddress(maps.getReplyTo())) {
+ continueProcessing = false;
+ } else {
+ // ensure the inbound MAPs are available in both the full & fault
+ // response messages (used to determine relatesTo etc.)
+ ContextUtils.propogateReceivedMAPs(maps,
message.getExchange());
+ }
}
}
if (continueProcessing) {
Modified: cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java?rev=992686&r1=992685&r2=992686&view=diff
==============================================================================
--- cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java (original)
+++ cxf/trunk/rt/ws/addr/src/test/java/org/apache/cxf/ws/addressing/MAPAggregatorTest.java Sat Sep 4 21:37:46 2010
@@ -33,16 +33,13 @@ import javax.xml.namespace.QName;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
-//import javax.xml.ws.RequestWrapper;
-//import javax.xml.ws.ResponseWrapper;
-
-
import org.apache.cxf.Bus;
import org.apache.cxf.binding.Binding;
import org.apache.cxf.binding.soap.SoapFault;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageImpl;
import org.apache.cxf.phase.PhaseManager;
@@ -58,16 +55,17 @@ import org.apache.cxf.service.model.Inte
import org.apache.cxf.service.model.MessageInfo.Type;
import org.apache.cxf.service.model.OperationInfo;
import org.apache.cxf.service.model.ServiceInfo;
+
import org.apache.cxf.transport.Conduit;
import org.apache.cxf.transport.Destination;
import org.easymock.classextension.EasyMock;
import org.easymock.classextension.IMocksControl;
+
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-
import static org.apache.cxf.binding.soap.Soap11.SOAP_NAMESPACE;
import static org.apache.cxf.message.Message.REQUESTOR_ROLE;
import static org.apache.cxf.ws.addressing.JAXWSAConstants.CLIENT_ADDRESSING_PROPERTIES;
@@ -319,6 +317,37 @@ public class MAPAggregatorTest extends A
control.verify();
verifyMessage(message, true, false, false /*check*/);
}
+
+ @Test
+ public void testTwoWayRequestWithReplyToNone() throws Exception {
+ Message message = new MessageImpl();
+ Exchange exchange = new ExchangeImpl();
+ message.setExchange(exchange);
+ setUpMessageProperty(message,
+ REQUESTOR_ROLE,
+ Boolean.FALSE);
+ AddressingPropertiesImpl maps = new AddressingPropertiesImpl();
+ EndpointReferenceType replyTo = new EndpointReferenceType();
+ replyTo.setAddress(ContextUtils.getAttributedURI(Names.WSA_NONE_ADDRESS));
+ maps.setReplyTo(replyTo);
+ AttributedURIType id =
+ ContextUtils.getAttributedURI("urn:uuid:12345");
+ maps.setMessageID(id);
+ maps.setAction(ContextUtils.getAttributedURI(""));
+ setUpMessageProperty(message,
+ SERVER_ADDRESSING_PROPERTIES_INBOUND,
+ maps);
+ setUpMessageProperty(message,
+ "org.apache.cxf.ws.addressing.map.fault.name",
+ "NoneAddress");
+
+ try {
+ aggregator.mediate(message, false);
+ fail("Two way request with ReplyTo address set to none must fail");
+ } catch (SoapFault ex) {
+ // expected
+ }
+ }
private Message setUpMessage(boolean requestor,