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 [EMAIL PROTECTED] 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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]