Tôi đã viết một ứng dụng java sử dụng JAXB cho các phép biến đổi XSL. Tôi đã bao gồm saxon9.jar trong classpath của tôi để tôi có thể sử dụng XSLT 2.0 thay vì XSLT 1.0 trên dòng lệnh.Thực thi JAXB mặc định của Java được chọn trên đường dẫn lớp của tôi
java -classpath ./lib/saxon9.jar:./ -jar myApp.jar
Tôi đã bao gồm mã trong XSL để báo cáo XSLT được sử dụng.
<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>
Báo cáo sẽ báo cáo.
XSLT Version: 1.0
XSLT Vendor: Apache Software Foundation (Xalan XSLTC)
XSLT Vendor URL: http://xml.apache.org/xalan-j
Đây là triển khai mặc định là một phần của JVM.
Tôi làm cách nào để sử dụng Saxon mà tôi đã chỉ định?
Theo dõi:
Vì vậy, không ai trong số những phương pháp làm việc (trừ đặt jar saxon trong thư mục xác nhận), nhưng tất cả đều phải làm việc. Có vẻ như sự kết hợp của tôi bằng cách sử dụng "-jar myApp.jar" và mong muốn một triển khai XSLT thay thế không tương thích. Nói cách khác ...
java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./ -jar myApp.jar
.. .does không hoạt động, nhưng điều này có nghĩa là ...
java -Djavax.xml.transform.TransformerFactory = net.sf.saxon.TransformerFactoryImpl -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot .myApp
... thật thú vị, tôi thậm chí không phải chỉ định nhà máy và tôi nhận được phiên bản saxon ...
java -classpath ./lib/saxon9.jar:./myApp.jar org.dacracot.myApp
Điều này hiệu quả nhưng tôi không thích điều đó. Thay đổi toàn bộ JVM của tôi dường như chống lại mục đích của classpath. – dacracot
Tôi biết. Tuy nhiên đây là cách duy nhất để thay thế một lớp JVM và tốt nhất nên tránh. Ngay cả với ClassLoaders của riêng bạn, bạn không thể tải một lớp từ các gói java hoặc javax. – kgiannakakis
Điều này đã phá vỡ các ứng dụng khác ... cụ thể là nhật thực. – dacracot