在我的类路径中选择了 Java 的默认 JAXB 实现

标签 java xml xslt jaxb classpath

我编写了一个利用 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了解配置工厂的所有可能方法。

  1. 系统属性
  2. lib/jaxp.properties
  3. 服务配置文件(可能在 saxon JAR,/META-INF/services/javax.xml.transform.TransformerFactory 中)

关于在我的类路径中选择了 Java 的默认 JAXB 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/547599/

相关文章:

Java 插件 "There is no site selected"对此有什么想法吗?

javascript - 使用 JavaScript 在另一个窗口中打开 XML 内容

mysql - 如何将存储在 XML 文件中的数据转换成关系数据库(MySQL)?

javascript - 如何让 IE9 MSXML6 执行包含 javascript 的集成 XSLT 处理?

html - 使用 xsl :value-of select as HTML attribute value 的问题

java - Spark-sql找不到Hive中的数据?

java - 我的 ShaderProgram 不工作

java - 类作为用户定义的数据类型

python - 使用python将sql结果写入XML

javascript - xsltprocessor 在 Chrome 中调试