JAXP XSLT transformer using wrong implementation by default
Found the issue myself. It turns out that I had the apache-tomcat-5.5.23-compat
files installed, as I was migrating from Java 1.4.2. The solution was to remove everything under the $CATALINA_HOME/common/endorsed
directory (in particular xercesImpl.jar
and xml-apis.jar
) and the bin/jmx.jar
files.
Jonathan
I'm a programmer living and working in Glasgow, Scotland. Day-to-day, I work with Java, SQL, some JEE technologies, like JPA, and Javascript. I'm passionate about performance, and really interested in highly-scalable web applications. I enjoy working with legacy code (Crazy, I know!) because of its trove of interesting challenges.
Updated on June 16, 2022Comments
-
Jonathan almost 2 years
I've got a Tomcat 5.5 web application that uses the Apache Commons-Configuration library to generate an XML configuration file at runtime. Commons-Configuration, in turn, uses the
javax.xml.transform
JAXP API to accomplish this.Since upgrading to Java 7, the operation fails with the following error message:
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
In past releases, I've never bundled xalan.jar, instead relying on the platform default XSLT implementation.
Some things I've checked:
- There are no
META-INF/services/javax.xml.transform.TransformerFactory
entries in any of my application JAR files, library jars, or in the Tomcat jars - The
javax.xml.transform.TransformerFactory
system property is unset (verified at runtime through JVisualVM) - There is no
jaxp.properties
file in thejre/lib
directory
Running with
-Djaxp.debug=1
produces the following output:JAXP: find factoryId =javax.xml.transform.TransformerFactory JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
Where's this fallback value coming from? Oracle ships the Xalan transformer, but since 1.7 has repackaged it as
com.sun.org.apache.xalan.processor...
. Shouldn't that be the fallback value? - There are no