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
- It's another new precent -an API increment in a 'maintenance'
Java release
- 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.
- Anyone doing SOAP stuff, in any stack that implements JAX-WS,
will have to requalify their code for Java 6.4.
- JAXB Code that works properly on Java6.4 may not work on Java
6.0.
- Anyone doing JAXB stuff in their code will also need to
requalify their code for Java 6.4
- 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.
contains a single line that references a Sun bug number: