Я написал java-приложение, которое использует JAXB для XSL-преобразований. Я включил 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.
Как заставить его использовать саксонца, которого я указал?
Продолжение:
Таким образом, ни один из этих методов не сработал (кроме размещения саксонского фляги в одобренном каталоге), но все они должны были работать. Кажется, что сочетание того, что я использовал «-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