Tengo una aplicación web Tomcat 5.5 que utiliza la biblioteca Apache Commons-Configuration para generar un archivo de configuración XML en tiempo de ejecución. Commons-Configuration, a su vez, usa la API JAXP javax.xml.transform
para lograr esto.Transformador JAXP XSLT utilizando la implementación incorrecta de forma predeterminada
Desde la actualización a Java 7, la operación falla con el mensaje de error siguiente:
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
En versiones anteriores, nunca he liado xalan.jar, en lugar de confiar en la implementación de la plataforma por defecto XSLT.
algunas cosas que he verificado:
- No hay
META-INF/services/javax.xml.transform.TransformerFactory
entradas en cualquiera de mis archivos JAR aplicación, frascos de la biblioteca, o en los frascos de Tomcat - La propiedad
javax.xml.transform.TransformerFactory
sistema está desarmado (verificado por lo tiempo de ejecución a través jvisualvm) - no hay ningún archivo en el directorio
jaxp.properties
jre/lib
Correr con -Djaxp.debug=1
produce la siguiente salida:
JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
¿De dónde viene este valor de retorno? Oracle envía el transformador Xalan, pero desde 1.7 lo ha reempaquetado como com.sun.org.apache.xalan.processor...
. ¿No debería que sea el valor de reserva?
¿Marcó 'CATALINA_HOME/lib'? – Brad
Tomcat 5.5 no utiliza '$ CATALINA_HOME/lib'. Afaik ese es Tomcat 6+. Revisé '$ CATALINA_HOME/server',' common' y 'shared' en vano. – Jonathan
La clase 'org.apache.xalan.processor.TransformerFactoryImpl' podría ser de una configuración anterior de JDK1.4, así que espero que haya un xalan.jar sospechoso en algún lugar de' CLASSPATH' – Brad