Utilizo Xalan en mi aplicación, pero necesito usar Saxon con una implementación de referencia para generar resultados de prueba para comparar. Quiero usarlos ambos durante las pruebas unitarias. Sin embargo, tan pronto como se agrego una dependencia de Saxon en el .pom proyecto, la aplicación parece utilizar sajona para todas las operaciones XSLT y XPath durante las pruebas:Usando Xalan junto a Saxon
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.4</version>
<scope>test</scope>
</dependency>
Esto hace que la aplicación principal falle al generar salida debido a un comportamiento XPath diferente. Cuando se ejecuta la aplicación principal fuera del alcance de la prueba, funciona.
¿Cómo puedo ejecutar la aplicación principal usando Xalan, pero las pruebas con Saxon, durante las pruebas?
He intentado fijar la siguiente propiedad antes de ejecutar los Xalan y sajones partes:
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl ");
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");
También he tratado de poner las piezas Xalan y sajones en diferentes proyectos, y también he tratado de utilizar los dos de un tercer proyecto, con el mismo resultado.
Se convierte en el XPath parte que está fallando sin embargo. ¿Hay alguna manera de decirle a XPathFactory que use la implementación predeterminada? Esta respuesta dice cómo hacer lo contrario, use la implementación de Saxon http://stackoverflow.com/questions/926222/using-saxon-xpath-engine-in-java. – Danik
Eso sería org.apache.xpath.jaxp.XPathFactoryImpl según http://www.jarvana.com/jarvana/view/xalan/xalan/2.7.0/xalan-2.7.0.jar!/org/apache/ xpath/jaxp/XPathFactoryImpl.class? classDetails = ok. De todos modos, sugiero utilizar el mecanismo JAXP para su aplicación en lugar de hacerlo dependiente de la implementación a menos que tenga casos extremos de uso en su aplicación. Solo use el código impl dependiente en las pruebas. –
No estoy de acuerdo. Mucha gente se tropieza porque usa el mecanismo JAXP y elige un procesador XPath 2.0 cuando su aplicación requiere un procesador XPath 1.0. No puede pedir explícitamente un procesador XPath 1.0; si no dice lo que quiere, no sabe lo que obtendrá y puede que no funcione. –