Steve: Developing on the Edge - Java 6.4 is a whole new Java Release!
Steve: Developing on the Edge
Thoughts on development, Web-services, technology and mountains.
14Jan
Mon2008
Java 6.4 is a whole new Java Release!

There is a new update to Java 6.0 out, update 4. It makes sense to upgrade, provided you don't use any WS-* code, in which case you should upgrade very carefully. Why? Because Sun have rolled an update to JAX-WS, the SOAP API (and their implementation) into the update. This is no longer a bug-fix release -this is a feature change. This is a very dangerous precedent, and all because someone made the mistake of putting a SOAP engine in there in the first place.

When Java 6 shipped, many moons ago, it came with JAX-WS 2.0; the next iteration of the broadly disliked JAX-RPC API. And it came with Sun's initial implementation, which predates all the handholding and interop testing with Microsoft. To get decent interop -especially the stuff like WS-Security that the SOAP proponents argue is why WS-* is needed, you need up upgrade your SOAP stack to a better version. Unfortunately, because the SOAP runtime/api is now integrated with the Java Runtime, you can only do so through Java's (awful) endorsed library mechanism, or some impressive classloader abuse about which I have already expressed my concerns, as has that new IBM FTE, dims. To get JAX-WS 2.1 on Java 6 you had to create a new classloader that blocked access to the implementation on the parent javax libraries...a very dangerous precedent for which we are all glad Sun has set, as now their lawyers can't stop us from doing the same thing.

Clearly someone at Sun recognised that this whole mess was out of control, and came up with a solution: update the SOAP stack in Java 6, which is what they have just done. For those people actually using Sun's implementation, or trying to get a recent copy of someone else's stack to work, this is actually progress. Especially as you can now use the new stuff under Java Web Start. But

  1. It's another new precent -an API increment in a 'maintenance' Java release
  2. SOAP Code that works properly on Java6.4 (let's give it a full point numbering to make it clear it's a big change), won't work on Java 6.0.
  3. Anyone doing SOAP stuff, in any stack that implements JAX-WS, will have to requalify their code for Java 6.4.
  4. JAXB Code that works properly on Java6.4 may not work on Java 6.0.
  5. Anyone doing JAXB stuff in their code will also need to requalify their code for Java 6.4
  6. Code compiled on Java 6.4 that uses JAXB or JAX-WS may not link on Java 6.0

Overall, I think moving up to JAX Ws 2.1 is progress. If you must use SOAP (mistake 1), and you opt to use the JCP-managed API (mistake 2), then the least the main proponents of the API/stack can do is make the thing work. I'm sure the eight people that use their stack will feel happy and cared for. But why ship the SOAP libraries in Java 6 in the first place? If they had been left out, none of the past problems and present changes would have been needed? More importantly, the compatibility issues are such that SOAP/JAXB code built on Java6.4 may not work on Java6.0. This should have been given a full release number, not an update.

Comments

What JAXB is it, anyway?reply to this thread
On 29 January 2008 at 14: 39 SG commented:
First of all, that was well said. I can only find one thing to disagree with: there are certainly more than 8 people using the Sun provided stack.
I can't figure out what exact version of JAXB is in update 4. They say it is 2.1, but which 2.1? I had heard at one point it was to be 2.1.3. The update 4 release notes http://java.sun.com/javase/6/webnotes/ReleaseNotes.html
contains a single line that references a Sun bug number:
6535162 jax-ws other JAXWS 2.1 RI should be integrated in JDK 6
This bug number does not exist in their bug tracking system.
So not only do they release a new JDK in a minor update, it's not possible to determine what's in that minor update.