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/01/28 15:11:28 UTC

svn commit: r615885 - in /webservices/axis2/trunk/java/modules: addressing/src/org/apache/axis2/handlers/addressing/ addressing/test/org/apache/axis2/handlers/addressing/ kernel/src/org/apache/axis2/addressing/ metadata/src/org/apache/axis2/jaxws/serve...

Author: pradine
Date: Mon Jan 28 06:11:24 2008
New Revision: 615885

URL: http://svn.apache.org/viewvc?rev=615885&view=rev
Log:
More refactoring of the WS-Addressing handlers.

Modified:
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
    webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
    webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTestBase.java
    webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandlerTest.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java
    webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingInHandler.java Mon Jan 28 06:11:24 2008
@@ -70,17 +70,18 @@
     }
     
     public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
-        //Determine if we want to ignore addressing headers. This parameter cannot be
-        //retrieved from the HandlerDescription because it's value can vary on a per
-        //service basis.
-        Parameter disableParam = msgContext.getParameter(DISABLE_ADDRESSING_HANDLERS);
+        //Determine if we want to ignore addressing headers. This parameter must
+        //be retrieved from the message context because it's value can vary on a
+        //per service basis.
+        Parameter disableParam = msgContext.getParameter(DISABLE_ADDRESSING_FOR_IN_MESSAGES);
         String value = Utils.getParameterValue(disableParam);
         if (JavaUtils.isTrueExplicitly(value)) {
             if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
                 log.debug(
-                        "The handler has been disabled. No further processing will take place.");
+                        "The AddressingInHandler has been disabled. No further processing will take place.");
             }
             msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+            msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.FALSE);
             return InvocationResponse.CONTINUE;         
         }
 
@@ -88,6 +89,7 @@
         SOAPHeader header = msgContext.getEnvelope().getHeader();
         if (header == null) {
             msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+            msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.FALSE);
             return InvocationResponse.CONTINUE;
         }
 
@@ -119,27 +121,40 @@
         }
         else {
             msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+            msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.FALSE);
+            
             if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
-                log.debug("No Headers present corresponding to any supported WS-Addresing namespace.");
+                log.debug("The specified namespace is not supported by this handler, " + namespace);
             }            
 
             return InvocationResponse.CONTINUE;
         }
 
         if (iterator.hasNext()) {
-            msgContext.setProperty(WS_ADDRESSING_VERSION, namespace);
-            msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.FALSE);
-
             if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
                 log.debug(namespace +
-                          " Headers present in the SOAP message. Starting to process ...");
+                          " headers present in the SOAP message. Starting to process ...");
             }
-            if (extractAddressingInformation(header, msgContext, iterator, namespace)) {
+            
+            if (extractAddressingInformation(msgContext, iterator, namespace)) {
+                // check for reference parameters
+                if (!disableRefparamExtract) {
+                    extractToEprReferenceParameters(msgContext.getTo(), header, namespace);
+                }
+                
+                msgContext.setProperty(WS_ADDRESSING_VERSION, namespace);
+                msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.FALSE);
                 msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.TRUE);
             }
+            else {
+                msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+                msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.FALSE);                
+            }
         }
         else {
             msgContext.setProperty(DISABLE_ADDRESSING_FOR_OUT_MESSAGES, Boolean.TRUE);
+            msgContext.setProperty(IS_ADDR_INFO_ALREADY_PROCESSED, Boolean.FALSE);
+
             if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
                 log.debug("No Headers present corresponding to " + namespace);
             }
@@ -151,15 +166,14 @@
     /**
      * Pull addressing headers out from the SOAP message.
      *
-     * @param header the header of the SOAP message
      * @param messageContext the active MessageContext
      * @param headers an Iterator over the addressing headers targeted to me
      * @param namespace the addressing namespace
      * @return true if addressing information was found
      * @throws AxisFault if an error occurs
      */
-    boolean extractAddressingInformation(SOAPHeader header, MessageContext messageContext,
-                                                   Iterator headers, String namespace)
+    private boolean extractAddressingInformation(MessageContext messageContext, Iterator headers,
+                                         String namespace)
             throws AxisFault {
         Options messageContextOptions = messageContext.getOptions();
 
@@ -229,7 +243,6 @@
         if (toBlock != null && !ignoreHeaders[TO_FLAG]) {
             extractToEPRInformation(toBlock,
                                     messageContextOptions,
-                                    header,
                                     namespace);
         }
         if (messageIDBlock != null && !ignoreHeaders[MESSAGEID_FLAG]) {
@@ -437,8 +450,7 @@
     }
 
     private void extractToEPRInformation(SOAPHeaderBlock soapHeaderBlock,
-                                         Options messageContextOptions, SOAPHeader header,
-                                         String namespace) {
+                                         Options messageContextOptions, String namespace) {
 
         EndpointReference epr;
         //here the addressing epr overidde what ever already there in the message context
@@ -456,10 +468,6 @@
             epr.setAddressAttributes(attributes);
         }
 
-        // check for reference parameters
-        if (!disableRefparamExtract) {
-            extractToEprReferenceParameters(epr, header, namespace);
-        }
         soapHeaderBlock.setProcessed();
 
         if (log.isTraceEnabled()) {

Modified: webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/src/org/apache/axis2/handlers/addressing/AddressingOutHandler.java Mon Jan 28 06:11:24 2008
@@ -42,6 +42,7 @@
 import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.description.AxisEndpoint;
 import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.HandlerDescription;
 import org.apache.axis2.description.Parameter;
 import org.apache.axis2.handlers.AbstractHandler;
 import org.apache.axis2.util.JavaUtils;
@@ -60,6 +61,18 @@
 
     private static final Log log = LogFactory.getLog(AddressingOutHandler.class);
 
+    private boolean includeOptionalHeaders = false;
+
+    public void init(HandlerDescription arg0) {
+        super.init(arg0);
+
+        //Determine whether to include optional addressing headers in the output message.
+        //The default is not to include any headers that can be safely omitted.
+        Parameter param = arg0.getParameter(INCLUDE_OPTIONAL_HEADERS);
+        String value = Utils.getParameterValue(param);
+        includeOptionalHeaders = JavaUtils.isTrueExplicitly(value);
+    }
+
     public InvocationResponse invoke(MessageContext msgContext) throws AxisFault {
         // it should be able to disable addressing by some one.
         if (msgContext.isPropertyTrue(DISABLE_ADDRESSING_FOR_OUT_MESSAGES)) {
@@ -80,11 +93,13 @@
                 Submission.WSA_NAMESPACE.equals(addressingVersionFromCurrentMsgCtxt);
 
         // Determine whether to include optional addressing headers in the output.
-        Parameter param = msgContext.getParameter(INCLUDE_OPTIONAL_HEADERS);
-        String value = Utils.getParameterValue(param);
-        boolean includeOptionalHeaders = JavaUtils.isTrueExplicitly(value) ||
+        boolean includeOptionalHeaders = this.includeOptionalHeaders ||
                                             msgContext.isPropertyTrue(INCLUDE_OPTIONAL_HEADERS);
 
+        if (LoggingControl.debugLoggingAllowed && log.isDebugEnabled()) {
+            log.debug("includeOptionalHeaders=" + includeOptionalHeaders);
+        }
+
         // Determine if a MustUnderstand attribute will be added to all headers in the
         // addressing namespace.
         boolean addMustUnderstandAttribute =
@@ -320,7 +335,7 @@
                         		if (Final.WSA_DEFAULT_RELATIONSHIP_TYPE.equals(relationshipType) ||
                                         Submission.WSA_DEFAULT_RELATIONSHIP_TYPE
                                                 .equals(relationshipType)) {
-                        			relationshipType = null;
+                        			relationshipType = null; //Omit the attribute.
                         		}
                         	}
                         	
@@ -372,10 +387,8 @@
                 String address = epr.getAddress();
                 if (address != null && address.length()!=0) {
                     if (!includeOptionalHeaders && isFinalAddressingNamespace &&
-                            (Final.WSA_ANONYMOUS_URL.equals(address) ||
-                                    //Don't use epr.hasAnonymousAddress() here as it may
-                                    Submission.WSA_ANONYMOUS_URL.equals(address)))
-                    { //recognize none WS-Addressing anonymous values.
+                            hasWSASpecifiedAnonymousAddress(epr))
+                    {
                         return; //Omit the header.
                     }
                     createSOAPHeaderBlock(address, WSA_TO, epr.getAddressAttributes());
@@ -421,13 +434,12 @@
                 } else {
                     epr = new EndpointReference(anonymous);
                 }
-            } else if (!isFinalAddressingNamespace && epr.hasNoneAddress()) {
+            }
+            else if (!isFinalAddressingNamespace && epr.hasNoneAddress()) {
                 return; //Omit the header.
-            } else if (Final.WSA_ANONYMOUS_URL.equals(epr.getAddress()) ||
-                    //Don't use epr.hasAnonymousAddress() here as it may
-                    Submission.WSA_ANONYMOUS_URL.equals(epr.getAddress()))
-            { //recognize none WS-Addressing anonymous values.
-
+            }
+            else if (hasWSASpecifiedAnonymousAddress(epr))
+            {
                 if (!includeOptionalHeaders && isFinalAddressingNamespace &&
                         AddressingConstants.WSA_REPLY_TO.equals(headerName)) {
                     return; //Omit the header.
@@ -572,6 +584,22 @@
                     }
                 }
             }
+        }
+
+        /**
+         * We can't use {@link EndpointReference#hasAnonymousAddress} in this handler as it may
+         * return <code>true</code> for none WS-Addressing specified anonymous values. This is
+         * important because WS-Addressing anonymous values have additional semantics that is
+         * not usually supported by other anonymous values. These WS-Addressing specific
+         * semantics are captured in this handler at the points where this method is called.
+         * 
+         * @param epr the <code>EndpointReference</code> to test.
+         * @return <code>true</code> if the <code>EndpointReference</code> has an anonymous address,
+         * <code>false</code> otherwise.
+         */
+        private boolean hasWSASpecifiedAnonymousAddress(EndpointReference epr) {
+            String address = epr.getAddress();
+            return Final.WSA_ANONYMOUS_URL.equals(address) || Submission.WSA_ANONYMOUS_URL.equals(address);
         }
         
         private void addRoleToHeader(OMElement header){

Modified: webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTestBase.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTestBase.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTestBase.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingInHandlerTestBase.java Mon Jan 28 06:11:24 2008
@@ -24,7 +24,6 @@
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.RolePlayer;
 import org.apache.axiom.soap.SOAPEnvelope;
-import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 import org.apache.axis2.Constants;
@@ -70,12 +69,9 @@
                                                                 MessageContext mc)
             throws Exception {
         StAXSOAPModelBuilder omBuilder = testUtil.getOMBuilder(testMessagePath);
-        SOAPHeader header = ((SOAPEnvelope)omBuilder.getDocumentElement()).getHeader();
-        RolePlayer rolePlayer = (RolePlayer)mc.getConfigurationContext()
-                .getAxisConfiguration().getParameterValue(Constants.SOAP_ROLE_PLAYER_PARAMETER);
-        Iterator addressingHeaderBlocks = header.getHeadersToProcess(rolePlayer, addressingNamespace);
-        inHandler.extractAddressingInformation(header, mc, addressingHeaderBlocks,
-                                               addressingNamespace);
+        SOAPEnvelope envelope = (SOAPEnvelope) omBuilder.getDocumentElement();
+        mc.setEnvelope(envelope);
+        inHandler.invoke(mc);
     }
 
     protected Options extractAddressingInformationFromHeaders(RolePlayer rolePlayer) throws Exception{

Modified: webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandlerTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandlerTest.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandlerTest.java (original)
+++ webservices/axis2/trunk/java/modules/addressing/test/org/apache/axis2/handlers/addressing/AddressingSubmissionInHandlerTest.java Mon Jan 28 06:11:24 2008
@@ -49,8 +49,10 @@
     }
 
     public void testExtractAddressingInformationFromHeaders() throws Exception{
-    	extractAddressingInformationFromHeaders(null);
-    	// Cannot check refparams in 2004/08 case as they can't be extracted until later
+    	Options options = extractAddressingInformationFromHeaders(null);
+
+        assertNotNull(options);
+        assertNotNull(options.getTo());
     }
     
     public void testExtractAddressingInformationFromHeadersCustomRole() throws Exception{

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/addressing/AddressingConstants.java Mon Jan 28 06:11:24 2008
@@ -44,7 +44,7 @@
     static final String PARAM_SERVICE_GROUP_CONTEXT_ID =
             "ServiceGroupContextIdFromAddressing";
     static final String IS_ADDR_INFO_ALREADY_PROCESSED = "IsAddressingProcessed";
-    static final String DISABLE_ADDRESSING_HANDLERS = "disableAddressingHandlers";
+    static final String DISABLE_ADDRESSING_FOR_IN_MESSAGES = "disableAddressingForInMessages";
     static final String ADDR_VALIDATE_ACTION = "addressing.validateAction";
 
     // ====================== WSDL Binding Constants ========================

Modified: webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java?rev=615885&r1=615884&r2=615885&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java (original)
+++ webservices/axis2/trunk/java/modules/metadata/src/org/apache/axis2/jaxws/server/config/AddressingConfigurator.java Mon Jan 28 06:11:24 2008
@@ -50,7 +50,7 @@
     		(SubmissionAddressing) ((EndpointDescriptionJava) endpointDescription).getAnnoFeature(SubmissionAddressingFeature.ID);
     	AxisService service = endpointDescription.getAxisService();
     	Parameter namespace = new Parameter(AddressingConstants.WS_ADDRESSING_VERSION, null);
-    	Parameter disable = new Parameter(AddressingConstants.DISABLE_ADDRESSING_HANDLERS, Boolean.FALSE);
+    	Parameter disable = new Parameter(AddressingConstants.DISABLE_ADDRESSING_FOR_IN_MESSAGES, Boolean.FALSE);
     	String addressingRequired = AddressingConstants.ADDRESSING_UNSPECIFIED;
     	
     	if (addressing != null && submissionAddressing != null) {



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