You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by pr...@apache.org on 2008/05/12 17:27:44 UTC

svn commit: r655524 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/handlers/addressing/ kernel/src/org/apache/axis2/addressing/ kernel/test/org/apache/axis2/addressing/

Author: pradine
Date: Mon May 12 08:27:43 2008
New Revision: 655524

URL: http://svn.apache.org/viewvc?rev=655524&view=rev
Log:
The AddressingValidationHandler is incorrectly rejecting requests that contain wsa:ReplyTo EPRs with the none URI address, according to the WS-Addressing Metadata spec.

Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingValidationHandler.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingHelper.java
    webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/AddressingHelperTest.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingValidationHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingValidationHandler.java?rev=655524&r1=655523&r2=655524&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingValidationHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingValidationHandler.java Mon May 12 08:27:43 2008
@@ -56,9 +56,6 @@
 
                 // Check if the wsa:MessageID is required or not.
                 checkMessageIDHeader(msgContext);
-                
-                // Check that if wsamInvocationPattern flag is in effect that the replyto and faultto are valid
-                checkWSAMInvocationPattern(msgContext);
             }
         }
 
@@ -66,6 +63,11 @@
             // Check that if wsaddressing=required that addressing headers were found inbound
             checkUsingAddressing(msgContext);
         }
+        
+        // Check that if wsamInvocationPattern flag is in effect that the replyto and faultto are valid
+        // This method must always be called to ensure that the async required invocation pattern is
+        // enforced.
+        checkWSAMInvocationPattern(msgContext);
 
         return InvocationResponse.CONTINUE;
     }
@@ -110,7 +112,7 @@
         }
         if(!AddressingConstants.WSAM_INVOCATION_PATTERN_BOTH.equals(value)){
         	if (WSAM_INVOCATION_PATTERN_SYNCHRONOUS.equals(value)) {
-        		if (AddressingHelper.isReplyRedirected(msgContext)) {
+        		if (!AddressingHelper.isSyncReplyAllowed(msgContext)) {
         			EndpointReference anonEPR =
         				new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL);
         			msgContext.setReplyTo(anonEPR);
@@ -118,7 +120,7 @@
         			AddressingFaultsHelper.triggerOnlyAnonymousAddressSupportedFault(msgContext,
         					AddressingConstants.WSA_REPLY_TO);
         		}
-        		if (AddressingHelper.isFaultRedirected(msgContext)) {
+        		if (!AddressingHelper.isSyncFaultAllowed(msgContext)) {
         			EndpointReference anonEPR =
         				new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL);
         			msgContext.setReplyTo(anonEPR);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingHelper.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingHelper.java?rev=655524&r1=655523&r2=655524&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingHelper.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingHelper.java Mon May 12 08:27:43 2008
@@ -24,7 +24,6 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisDescription;
 import org.apache.axis2.description.AxisOperation;
-import org.apache.axis2.description.AxisService;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.util.LoggingControl;
 import org.apache.axis2.util.Utils;
@@ -38,6 +37,52 @@
     private static final Log log = LogFactory.getLog(AddressingHelper.class);
 
     /**
+     * Returns true if the ReplyTo address matches one of the supported
+     * anonymous urls. If the ReplyTo is not set, anonymous is assumed, per the Final
+     * spec. The AddressingInHandler should have set the ReplyTo to non-null in the
+     * 2004/08 case to ensure the different semantics. (per AXIS2-885)
+     * 
+     * According to the WS-Addressing Metadata spec the none URI must not be rejected.
+     *
+     * @param messageContext
+     */
+    public static boolean isSyncReplyAllowed(MessageContext messageContext) {
+        EndpointReference replyTo = messageContext.getReplyTo();
+        if (replyTo == null) {
+            if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
+                log.debug(messageContext.getLogIDString() +
+                        " isSyncReplyAllowed: ReplyTo is null. Returning true");
+            }
+            return true;
+        } else {
+            return replyTo.hasAnonymousAddress() || replyTo.hasNoneAddress();
+        }
+    }
+
+    /**
+     * Returns true if the FaultTo address matches one of the supported
+     * anonymous urls. If the FaultTo is not set, the ReplyTo is checked per the
+     * spec.
+     * 
+     * According to the WS-Addressing Metadata spec the none URI must not be rejected.
+     *
+     * @param messageContext
+     * @see #isSyncReplyAllowed(org.apache.axis2.context.MessageContext)
+     */
+    public static boolean isSyncFaultAllowed(MessageContext messageContext) {
+        EndpointReference faultTo = messageContext.getFaultTo();
+        if (faultTo == null) {
+            if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
+                log.debug(messageContext.getLogIDString() +
+                        " isSyncFaultAllowed: FaultTo is null. Returning isSyncReplyAllowed");
+            }
+            return isSyncReplyAllowed(messageContext);
+        } else {
+            return faultTo.hasAnonymousAddress() || faultTo.hasNoneAddress();
+        }
+    }
+
+    /**
      * Returns true if the ReplyTo address does not match one of the supported
      * anonymous urls. If the ReplyTo is not set, anonymous is assumed, per the Final
      * spec. The AddressingInHandler should have set the ReplyTo to non-null in the
@@ -71,7 +116,7 @@
         if (faultTo == null) {
             if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
                 log.debug(messageContext.getLogIDString() +
-                        " isReplyRedirected: FaultTo is null. Returning isReplyRedirected");
+                        " isFaultRedirected: FaultTo is null. Returning isReplyRedirected");
             }
             return isReplyRedirected(messageContext);
         } else {

Modified: webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/AddressingHelperTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/AddressingHelperTest.java?rev=655524&r1=655523&r2=655524&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/AddressingHelperTest.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/test/org/apache/axis2/addressing/AddressingHelperTest.java Mon May 12 08:27:43 2008
@@ -41,11 +41,23 @@
         assertTrue(AddressingHelper.isReplyRedirected(mc));
     }
 
+    public void testIsReplyRedirectedNoneReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
+        assertTrue(AddressingHelper.isReplyRedirected(mc));
+    }
+
     public void testIsFaultRedirectedNoFaultToOrReplyTo() {
         MessageContext mc = new MessageContext();
         assertFalse(AddressingHelper.isFaultRedirected(mc));
     }
 
+    public void testIsFaultRedirectedNoFaultTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference("http://ws.apache.org/axis2"));
+        assertTrue(AddressingHelper.isFaultRedirected(mc));
+    }
+
     public void testIsFaultRedirectedAnonFaultTo() {
         MessageContext mc = new MessageContext();
         mc.setFaultTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
@@ -57,4 +69,62 @@
         mc.setFaultTo(new EndpointReference("http://ws.apache.org/axis2"));
         assertTrue(AddressingHelper.isFaultRedirected(mc));
     }
+
+    public void testIsFaultRedirectedNoneReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
+        assertTrue(AddressingHelper.isFaultRedirected(mc));
+    }
+
+    public void testIsSyncReplyAllowedNoReplyTo() {
+        MessageContext mc = new MessageContext();
+        assertTrue(AddressingHelper.isSyncReplyAllowed(mc));
+    }
+
+    public void testIsSyncReplyAllowedAnonReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+        assertTrue(AddressingHelper.isSyncReplyAllowed(mc));
+    }
+
+    public void testIsSyncReplyAllowedNonAnonReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference("http://ws.apache.org/axis2"));
+        assertFalse(AddressingHelper.isSyncReplyAllowed(mc));
+    }
+
+    public void testIsSyncReplyAllowedNoneReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
+        assertTrue(AddressingHelper.isSyncReplyAllowed(mc));
+    }
+
+    public void testIsSyncFaultAllowedNoFaultToOrReplyTo() {
+        MessageContext mc = new MessageContext();
+        assertTrue(AddressingHelper.isSyncFaultAllowed(mc));
+    }
+
+    public void testIsSyncFaultAllowedNoFaultTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference("http://ws.apache.org/axis2"));
+        assertFalse(AddressingHelper.isSyncFaultAllowed(mc));
+    }
+
+    public void testIsSyncFaultAllowedAnonFaultTo() {
+        MessageContext mc = new MessageContext();
+        mc.setFaultTo(new EndpointReference(AddressingConstants.Final.WSA_ANONYMOUS_URL));
+        assertTrue(AddressingHelper.isSyncFaultAllowed(mc));
+    }
+
+    public void testIsSyncFaultAllowedNonAnonFaultTo() {
+        MessageContext mc = new MessageContext();
+        mc.setFaultTo(new EndpointReference("http://ws.apache.org/axis2"));
+        assertFalse(AddressingHelper.isSyncFaultAllowed(mc));
+    }
+
+    public void testIsSyncFaultAllowedNoneReplyTo() {
+        MessageContext mc = new MessageContext();
+        mc.setReplyTo(new EndpointReference(AddressingConstants.Final.WSA_NONE_URI));
+        assertTrue(AddressingHelper.isSyncFaultAllowed(mc));
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org