2012-09-05 17 views
5

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.propertiesjre/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?

+0

¿Marcó 'CATALINA_HOME/lib'? – Brad

+0

Tomcat 5.5 no utiliza '$ CATALINA_HOME/lib'. Afaik ese es Tomcat 6+. Revisé '$ CATALINA_HOME/server',' common' y 'shared' en vano. – Jonathan

+0

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

Respuesta

8

Encontré el problema yo mismo. Resultó que tenía instalados los archivos apache-tomcat-5.5.23-compat, ya que estaba migrando desde Java 1.4.2. La solución fue eliminar todo en el directorio $CATALINA_HOME/common/endorsed (en particular xercesImpl.jar y xml-apis.jar) y los archivos bin/jmx.jar.

0

El mismo problema que yo también estaba obteniendo con Glassfish server V3.1 y al colocar xalan-2.7.0.jar en el directorio $ GLASSFISH_HOME \ lib \ endorsed, el problema se resolvió.

Cuestiones relacionadas