Invalid WS-A ReplyTo constant value used by WS-RM
-------------------------------------------------

                 Key: CXF-3151
                 URL: https://issues.apache.org/jira/browse/CXF-3151
             Project: CXF
          Issue Type: Bug
          Components: WS-* Components
    Affects Versions: 2.2.11
            Reporter: Aki Yoshida
             Fix For: 2.2.12


There is an issue in the way how the current WS-RM implementation
downgrades the WS-A namespace/constants to the 2004/08 version. I
would like to first explain the problem and ask you which solution is
preferred.

CXF uses WS-A 2005/08 internally but for WS-RM, it uses the 2004/08
version because the older WS-RM (1.0)
requires the use of the 2004/08 version. So, it is correct to convert
the internally used 2005/08 namespace/constants to their 2004/08
counterparts.

However, one problem is that the 2005/08 WS-A spec defined two constants

http://www.w3.org/2005/08/addressing/anonymous
http://www.w3.org/2005/08/addressing/none

While the 2004/08 WS-A version seems to have only defined

http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous

and not

http://schemas.xmlsoap.org/ws/2004/08/addressing/role/none

The current conversion used in CXF creates this undefined value and
this is causing some interoperability issues.
More concretely, when the WS-A ReplyTo element is set to the none
value and this is serialized into the above undefined 2004/08 none
constant, it is not recognized by some systems. According to the WS-RM
1.0, in such a case, the ReplyTo element should be omitted to convey
this "none" value (as there is no "none" constant).

Initially, I thought we should fix this issue by introducing a configurable 
property "usingNoneAddress" for the addressing configuration bean to turn on or 
off the serialization of the none address. However, this approach had a 
drawback on requiring a different default value interpretation based on the 
used namespace versions (i.e., false for 2004/08 and true for 2005/08) to make 
the test cases all work.

Therefore, I am proposing the following approach to solve this issue.

There is no configuration property. The serialization is determined by the 
addressing namespace.  Under 2004/08, the none value is omitted from 
serialization, while under 2005/08, the none value is serialized.

This will work for all the current tests except for the testVersioning test of 
MAPTest. This particular test uses the 2004/08 namespace and checks the 
presence of the ReplyTo header in the SOAP header, even though the header is 
associated with the none value and therefore it must not be present. In order 
to fix this test, I needed to modify the corresponding verification classes so 
that the presence of the ReplyTo header is not verified when the 2004/08 
namespace is used.

In summary, the changes that I suggest are as follows:

For the runtime ws.addressing:
org.apache.cxf.ws.addressing.soap.MAPCodec
  The ReplyTo header will not be serialized with the invalid none value. In 
other words, if the value is set to the none value while using the 2004/08 
namespace.

org.apache.cxf.ws.addressing.ContextUtils
  The back channel will be found even when the ReplyTo header is missing.

For the systests ws.addressing
org.apache.cxf.systest.ws.addressing MAPTestBase
  Its verifyHeaders method takes additionally a Boolean parameter 
replyToRequired to indicate whether the presence of the ReplyTo header must be 
verified.

org.apache.cxf.systest.ws.addressing HeaderVerifier
  Its verify method call the above verityHeaders method with the 
replyToRequired parameter set based on the namespace version.

The svn diff files of the above changes are attached.

Regards, Aki

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to