我编写了一个利用 JAXB 进行 XSL 转换的 Java 应用程序。我已将 saxon9.jar 包含在我的类路径中,以便我可以在命令行上使用 XSLT 2.0 而不是 XSLT 1.0。
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
我已在我的 XSL 中包含代码以报告所使用的 XSLT。
<xsl:comment><xsl:text >
</xsl:text>XSLT Version: <xsl:value-of select="system-property('xsl:version')" /> <xsl:text >
</xsl:text>XSLT Vendor: <xsl:value-of select="system-property('xsl:vendor')" /> <xsl:text >
</xsl:text>XSLT Vendor URL: <xsl:value-of select="system-property('xsl:vendor-url')" /> <xsl:text >
</xsl:text></xsl:comment>
报告。
XSLT Version: 1.0
XSLT Vendor: Apache Software Foundation (Xalan XSLTC)
XSLT Vendor URL: http://xml.apache.org/xalan-j
这是 JVM 的默认实现。
如何让它使用我指定的 Saxon?
跟进:
所以这些方法都不起作用(除了将 saxon jar 放在 endorsed 目录中),但它们都应该起作用。似乎我使用“-jar myApp.jar”和想要替代 XSLT 实现的组合是不兼容的。换句话说……
java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./-jar myApp.jar
...不起作用,但这确实...
java -Djavax.xml.transform.TransformerFactory=net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp
...有趣的是,我什至不必指定工厂,我就得到了 saxon 版本...
java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp
最佳答案
查看 TransformerFactory.newInstance() 的 javadoc了解配置工厂的所有可能方法。
- 系统属性
- lib/jaxp.properties
- 服务配置文件(可能在 saxon JAR,/META-INF/services/javax.xml.transform.TransformerFactory 中)
关于在我的类路径中选择了 Java 的默认 JAXB 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547599/