Search code examples
javaxml-serializationxerces

xerces serialization in Java 6


In Java 6, the entire xerces XML parser/serializer implementation is now in the Java runtime (rt.jar). The packages have been moved under the com.sun.* namespace, which places them off-limits for explicit reference within client code. This is not a problem when using the parser, which is instantiated via javax API-defined factories.

However, our code also uses xerces serialization (org.apache.xml.serialize.* ). AFAICT, there are no javax.xml API-defined factories for creating instances of Serializer and OutputFormat. This seems to imply that the only way to get one is to explicitly call the com.sun.org.apache.xml.serialize.* APIs.

I've found the serialization classes in javax.xml.stream, but they don't seem to provide any output-formatting control like the xerces OutputFormat class.

Question:

Is there a way to access the xerces serialization functionality (which is in rt.jar) via a javax standard API, without including xerces.jar and also without explicitly instantiating com.sun.* classes?

If not, is there an javax API-compliant way to achieve the same effect?


Solution

  • If you want to use a Xerces feature that's not exposed through an official java.* or javax.* API, then your only real solution is to include Xerces as a third-party library. Accessing the JRE-internal version of Xerces in any way would be a dangerous thing, since nothing guarantees that a valid JRE even has those classes (alternate JREs and even other versions of the same JRE might implement the JAXP APIs using a different implementation or even just move it to another package).