You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Daniel Kulp (JIRA)" <ji...@apache.org> on 2009/04/13 21:42:14 UTC
[jira] Resolved: (CXF-2167) WS-Addressing handler should not drop
messages when the RelatesTo property is explicitly set by client code
[ https://issues.apache.org/jira/browse/CXF-2167?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-2167.
------------------------------
Resolution: Fixed
Fix Version/s: 2.2.1
2.1.5
> WS-Addressing handler should not drop messages when the RelatesTo property is explicitly set by client code
> -----------------------------------------------------------------------------------------------------------
>
> Key: CXF-2167
> URL: https://issues.apache.org/jira/browse/CXF-2167
> Project: CXF
> Issue Type: Improvement
> Affects Versions: 2.1.4
> Environment: Found in JBossWS/CXF 2.1.4.
> Reporter: Andrew Dinn
> Fix For: 2.1.5, 2.2.1
>
>
> The WS Addressing (WSA) class MAPCodec checks the RelatesTo field of an incoming Message Addressing Properties to see if it equals a previously cached outgoing MessageId field. This allows it to re-establish the exchange associated with an outgoing message in a request-reply (RPC) style exchange. If a RelatesTo value is found which does nto correspond to a cached MessageId the message is dropped.
> The problem with this is that it breaks use of the RelatesTo field by application code. Specifically, an application may wish to correlate sequences of 1-way messages by installing the MessageId from one message into the RelatesTo field of its successor. Since these messages employ different channels MPACodec will not find a cached MessageId for a successor message and so stop delivery of the messages.
> A proposed fix is to change MAPCodec so that it only disables delivery if the RelatesTo field has a null value for its RelationshipType or if the RelationshipType is set to http://www.w3.org/2005/08/addressing/reply (this is the default value implied by a null setting). A patch for this fix which has been tested in JBossWS/CXF is given below
> [adinn@toby cxf-2.1.4]$ svn diff rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
> Index: rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
> ===================================================================
> --- rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java (revision 761707)
> +++ rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java (working copy)
> @@ -53,6 +53,8 @@
> import org.apache.cxf.message.Exchange;
> import org.apache.cxf.message.Message;
> import org.apache.cxf.phase.Phase;
> +import org.apache.cxf.ws.addressing.AddressingBuilder;
> +import org.apache.cxf.ws.addressing.AddressingConstants;
> import org.apache.cxf.ws.addressing.AddressingProperties;
> import org.apache.cxf.ws.addressing.AddressingPropertiesImpl;
> import org.apache.cxf.ws.addressing.AttributedURIType;
> @@ -73,6 +75,8 @@
>
> private static final Logger LOG = LogUtils.getL7dLogger(MAPCodec.class);
> private static final String IS_REFERENCE_PARAM_ATTR_NAME = "IsReferenceParameter";
> + private static final AddressingConstants ADDRESSING_CONSTANTS
> + = AddressingBuilder.getAddressingBuilder().newAddressingConstants();
>
> /**
> * REVISIT: map usage that the *same* interceptor instance
> @@ -83,7 +87,7 @@
>
> private VersionTransformer transformer;
> private HeaderFactory headerFactory;
> -
> +
> /**
> * Constructor.
> */
> @@ -463,6 +467,12 @@
> AttributedURIType.class,
> headerElement,
> unmarshaller));
> + } else if (Names.WSA_FROM_NAME.equals(localName)) {
> + maps.setFrom(decodeAsNative(
> + headerURI,
> + EndpointReferenceType.class,
> + headerElement,
> + unmarshaller));
> } else if (Names.WSA_TO_NAME.equals(localName)) {
> AttributedURIType addr = decodeAsNative(
> headerURI,
> @@ -721,7 +731,7 @@
> * @param maps the addressing properties
> */
> private void restoreExchange(SoapMessage message, AddressingProperties maps) {
> - if (maps != null && maps.getRelatesTo() != null) {
> + if (maps != null && maps.getRelatesTo() != null && isRelationshipReply(maps.getRelatesTo())) {
> Exchange correlatedExchange =
> uncorrelatedExchanges.remove(maps.getRelatesTo().getValue());
> if (correlatedExchange != null) {
> @@ -755,6 +765,11 @@
>
> }
>
> + private boolean isRelationshipReply(RelatesToType relatesTo) {
> + return relatesTo.getRelationshipType() == null
> + || relatesTo.getRelationshipType().equals(ADDRESSING_CONSTANTS.getRelationshipReply());
> + }
> +
> /**
> * Marks a message as partial response
> *
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.