Napisałem aplikację java, która wykorzystuje JAXB do transformacji XSL. Zawarłem saxon9.jar w mojej ścieżce klas, dzięki czemu mogę używać XSLT 2.0 zamiast XSLT 1.0 w wierszu poleceń.Domyślna implementacja JAXB języka Java jest wybierana przez moją ścieżkę klasy
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
Dołączyłem kod do mojego XSL, aby zgłosić użyty 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>
Donosi.
XSLT Version: 1.0
XSLT Vendor: Apache Software Foundation (Xalan XSLTC)
XSLT Vendor URL: http://xml.apache.org/xalan-j
Jest to domyślna implementacja, która jest częścią JVM.
Jak mogę to wykorzystać do korzystania z Saxona, który podałem?
Kontynuacja:
więc żadna z tych metod pracy (z wyjątkiem umieszczania Saskim słoik w zatwierdzonym katalogu), ale powinny one pracowały. Wygląda na to, że połączenie mojego użycia "-jar myApp.jar" i chęć alternatywnej implementacji XSLT były niekompatybilne. Innymi słowy ...
java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar
.. nie działa, ale to ...
java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot .myApp
... Co ciekawe, nawet nie trzeba określać fabryki i mam wersję saxon ...
java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp
To zadziałało, ale na pewno mi się to nie podoba. Zmiana całej maszyny JVM wydaje się sprzeczna z celem ścieżki klasy. – dacracot
Wiem. Jest to jednak jedyny sposób na zastąpienie klasy JVM i najlepiej go unikać. Nawet z własnymi ClassLoaders nie można załadować klasy z pakietów java lub javax. – kgiannakakis
To przełamało inne aplikacje ... mianowicie zaćmienie. – dacracot