transformador test online mapeo generate from curso codigo xslt maven xpath saxon xalan

test - xslt editor



Usando Xalan junto a Saxon (2)

Uso 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 agregue una dependencia de Saxon en el proyecto .pom, la aplicación parece usar Saxon para todas las operaciones xslt y XPath durante las pruebas:

<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 utilizando Xalan, pero las pruebas con Saxon, durante las pruebas?

Intenté establecer la siguiente propiedad antes de ejecutar las partes Xalan y Saxon:

System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl "); System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");

También traté de poner las partes de Xalan y Saxon en diferentes proyectos, y también intenté usarlas de un tercer proyecto, con el mismo resultado.


Aquí está la solución para completar:

System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":" + XPathFactory.DEFAULT_OBJECT_MODEL_URI, "org.apache.xpath.jaxp.XPathFactoryImpl"); System.setProperty(XPathFactory.DEFAULT_PROPERTY_NAME + ":" + NamespaceConstant.OBJECT_MODEL_SAXON, "net.sf.saxon.xpath.XPathFactoryImpl"); XPathFactory jaxpFactory = XPathFactory.newInstance(XPathFactory.DEFAULT_OBJECT_MODEL_URI); XPathFactory saxonFactory = XPathFactory.newInstance(NamespaceConstant.OBJECT_MODEL_SAXON);


Evite confiar en el mecanismo de fábrica de JAXP para seleccionar su motor de transformación. En su lugar, cargue el motor que desea explícitamente: es mucho más confiable y mucho más rápido. Para Saxon, reemplace la llamada en

TransformerFactory.newInstance()

con

new net.sf.saxon.TransformerFactoryImpl()

y para el uso de Xalan

new org.apache.xalan.processor.TransformerFactoryImpl()