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