2009-02-13 7 views
6

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

Odpowiedz

2

Czy próbowałeś umieścić swój słoik w katalogu endorsed?

Jeśli nie chcesz mieć wpływ na globalny, stosuje się następującą opcję:

-Djava.endorsed.dirs=my_dir 

w wierszu poleceń.

+0

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

+0

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

+0

To przełamało inne aplikacje ... mianowicie zaćmienie. – dacracot

0

Jak o

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

W wyniku: Wystąpił błąd podczas inicjowania maszyny wirtualnej java/lang/NoClassDefFoundError: java/lang/Object Przerwij pułapkę – dacracot

+0

Och, myślę, że musisz dodać rt.jar do bootclasspath w takim przypadku. –

1

Ta nieruchomość system powinien ustawić TransformerFactory Zamiennik:

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

wierzę klasa fabryka chcesz to net.sf.saxon.TransformerFactoryImpl

+0

Wciąż coraz ... Wyjątek w wątku „GW-1” javax.xml.transform.TransformerFactoryConfigurationError: Dostawca nie net.sf.saxon.TransformerFactoryImpl znaleźć \t na javax.xml.transform.TransformerFactory.newInstance (TransformerFactory.java:109) – dacracot

+0

Używanie ... java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar – dacracot

2

Sprawdź javadoc pod numerem TransformerFactory.newInstance() pod kątem wszystkich możliwych sposobów skonfigurowania fabryki.

  1. systemu własności
  2. lib/JAXP.Właściwości
  3. plik konfiguracyjny usługi (może być w Saskim JAR, /META-INF/services/javax.xml.transform.TransformerFactory)
2

Ostatni przykład pan pisał (w/o -Djavax ...) działa, ponieważ katalog META-INF/services zawiera plik o nazwie

java.xml.transform.TransformerFactory

z treścią

net.sf.saxon.TransformerFactoryImpl

powodem wykorzystaniem

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

prace i

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

nie jest to, że przy użyciu opcji -jar mówi Java (w) .exe ignorowanie reszty wiersza poleceń i wyciągnąć wszystko (ścieżka klasy zestawie) ze słoika na plik manifestu. Jeśli umieścisz plik saxon9.jar w ścieżce clas manifestu, to powinno działać.

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