我在应用程序中使用Xalan,但需要使用带有参考实现的Saxon来生成测试输出,以便与之进行比较。我想在单元测试中同时使用它们。但是,一旦我在项目.pom中添加了对Saxon的依赖,应用程序似乎在测试期间对所有的xslt和XPath操作都使用了Saxon:
<dependency>
<groupId>net.sf.saxon</groupId>
<artifactId>Saxon-HE</artifactId>
<version>9.4</version>
<scope>test</scope>
</dependency>这使得主应用程序在生成输出时由于不同的XPath行为而失败。当在测试范围之外运行主应用程序时,它可以工作。
在测试期间,我如何使用Xalan运行主应用程序,而使用Saxon进行测试?
在运行Xalan和Saxon部分之前,我已经尝试设置了以下属性:
System.setProperty("javax.xml.transform.TransformerFactory", "org.apache.xalan.processor.TransformerFactoryImpl ");
System.setProperty("javax.xml.transform.TransformerFactory", "net.sf.saxon.TransformerFactoryImpl");我还尝试将Xalan和Saxon部分放在不同的项目中,我还尝试在第三个项目中使用这两个部分,结果相同。
发布于 2012-06-27 21:59:43
避免依赖JAXP工厂机制来选择转换引擎。取而代之的是显式地加载你想要的引擎:它更可靠,速度也更快。对于Saxon,替换调用
TransformerFactory.newInstance()使用
new net.sf.saxon.TransformerFactoryImpl()和Xalan使用
new org.apache.xalan.processor.TransformerFactoryImpl()发布于 2012-06-28 16:56:02
下面是完整性的解决方案:
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);https://stackoverflow.com/questions/11224850
复制相似问题