Java的默认JAXB实现是在我的类路径上选择的

时间:2009-02-13 20:45:16

标签: 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

...有趣的是,我甚至不必指定工厂,我得到了撒克逊版......

java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp

5 个答案:

答案 0 :(得分:2)

您是否尝试过将jar放在endorsed目录中?

如果您不希望效果为全局,请使用以下选项:

-Djava.endorsed.dirs=my_dir

在命令行中。

答案 1 :(得分:2)

查看TransformerFactory.newInstance()的javadoc,了解配置工厂的所有可能方法。

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

答案 2 :(得分:2)

您发布的最后一个示例(w / o -Djavax ...)有效,因为META-INF / services目录包含名为

的文件
  

java.xml.transform.TransformerFactory

内容

  

net.sf.saxon.TransformerFactoryImpl

使用

的原因
java -cp lib/saxon9.jar;myjar.jar

有效,

java -cp lib/saxon9.jar -jar myjar.jar

不是使用-jar选项告诉java(w).exe忽略命令行的其余部分并从jar的清单文件中提取所有内容(包括类路径)。如果你把saxon9.jar放在你的jar清单的类路径中它应该可以工作。

Manifest-Version: 1.0
Main-Class: net.my.MainClass
Class-Path: lib/saxon9.jar

答案 3 :(得分:1)

此系统属性应设置替换TransformerFactory:

java -Djavax.xml.transform.TransformerFactory=com.foobar.AcmeTransformer MyApp

我相信你想要的工厂类是 net.sf.saxon.TransformerFactoryImpl

答案 4 :(得分:0)

怎么样

java -Xbootclasspath:lib/saxon9.jar -classpath . -jar myApp.jar