WS-Addressing needs a Phone Book

I’ve been looking into WS-Addressing lately, the W3C specification that aims to provide a transport-neutral mechanisms to address Web services. The basic idea is that an incoming SOAP message contain so-called Message Information Headers in the header, and that information is used to find an Endpoint Reference that matches it. The response is then sent back using that same information. It might not even go back to the same requester, if the header contains a ReplyTo or FaultTo.

A very useful specification, right?

Well, it depends on which one you mean. Turns out there are multiple versions available. There is the March 2003 version, the March 2004 version, and the August 2004 version. Then, control was handed over to the W3C, which split it into multiple parts: a generic part, a SOAP part, and a WSDL. Perhaps they thought the original version was too easy to read. The W3C published two version, one in August 2005, and the final version in May 2006.

The funny thing is that all of these version differ not only in namespace, because that would be easy to solve, but also in minute other ways. For instance, some define RefererenceProperties as part of the EndpointReference, while other define RefererenceParameters. Some define both. The difference between these two is that one is used to identify the endpoint being conveyed, while the other are associated with the endpoint to facilitate a particular interaction. You can guess which is which.

The inexperienced developer, who is not used to WS-* specifications, might think that this is easily solved. Just implement the final, latest version! Everyone implements that one, right?

Wrong again. Nobody actually implements the final version yet, as far as I can determine. Here’s a little matrix which shows which version are implemented by which some popular SOAP stacks. One interesting thing to notice is that Microsoft doesn’t even support WSE 2.0 in WSE 3.0.

ActiveSOAP Axis 2 WSE 2.0 WSE 3.0 XFire
March 2003 X
March 2004 X
August 2004 X X X
August 2005 X X
May 2006 X
(This table was created by browsing source code, and reading documentation. I could be wrong. I hope I’m wrong. Please tell me the WS-Addressing world is better than this). (Update: Dims informs me that Axis 2.0 implements the May 2006 version. My mistake! It’s hard to figure out by looking at the code, since the August 2005 and May 2006 version actually have the same namespace: http://www.w3.org/2005/08/addressing).

There are two lessons to be learned from this, besides the regular “WS-* SUCKS” brouhaha. If anyone tells you they implement WS-Addressing, make sure they tell you which version. And if we every want to make this interoperability thing work, we’d better not write and implement five different versions before we get it right.

5 Responses to “WS-Addressing needs a Phone Book”

  1. Dan Diephouse Says:

    Yeah, it sucks. IMO, the Aug 2004 is the important one (and it is used in other specs). There has been some talk about supporting the 2003 version in xfire too, but not too many people seem to care about it. Everyone is trying to track up to 1.0 as well.

    I don’t know why 5 versions is so surprising. It often takes us that long to get things right software, why should XML specs be that different?

  2. Steve: Developing on the Edge Says:

    WS-A versions

    Someone else notes that WS-Addressing versions are silly.

    Early versions have the ReferenceProperties and the ReferenceParams, but that got stripped down later on; now you only have one but you also have to markup which address headers were generate…

  3. Davanum Srinivas Says:

    How many versions of spring are there? How many versions of JDK are there? more importantly which versions of JDK, do you think people use in production environments? I agree with Dan. It has taken a bit for us (WS-ADDR WG) to get there, now there is a 1.0 out, it will take some time to switch to it. BTW, Axis2 supports May 2006.

    thanks, dims

  4. Arjen Poutsma Says:

    Well, I do understand that it can take a while to get to a final specification. And I’m not complaining about that.

    However, it is interesting to see that the non-final version were actually implemented. And not by the least (i.e. Microsoft). This makes the fact that there is a final version out there rather irrelevant, at least for the time being. If I would make a bet, I would bet on the August 2004 version of the spec, since that one is widely spread.

    I wonder why the same thing didn’t happen with the SOAP 1.2 spec? It has multiple version as well. Perhaps someone can shed some light on that.

    And you’re right, Spring has had many versions. Having said that: all version, including the upcoming 2.0 release, are fully backwards compatible. And the same goes for the JDK. Backwards compatibility is something you don’t find in WS-* specs.

  5. Paul Downey Says:

    I agree it sucks. Sticking with one namespace and strive to be backwards compatible might have been an option, at least until it hit the W3C. Which took far too long IMO.

    As for splitting the spec in two, blame negotiations behind closed doors which led to the W3C charter. Many of us in the WG were only interested in SOAP, but some madcap fellows ‘out there’ apparently want to bind the core properties to other transports such as MQ and publish them as ‘bindings’ .. sheesh!

    Adding simple stuff like Action, MessageID, the To/ReplyTo/FaultTo URIs is essential for SOAP, but the complexity that comes with Refps, and exploding EPRs injecting headers seems a bit too scary for my liking.

    It’s tempting to roll out the 2004/08 version in services, but I dislike the lack of control and errata process surrounding that vendor spec, NB WS-I are looking at the W3C spec. Maybe not making this stuff too central until everyone implements the W3C standard, the WS-I publishes consensus in the form of BP 2.0 and the RAMPish profile or the lack of clothes on the WS-* emperor is finally apparent is the safest path forward.