私たちのプロジェクトでは jasperreports 4.1.1 を使用していますが、問題なく動作しますが、最近 xslt 2.0 に切り替えることにしました。最初にしたことは、xalan (xslt 2.0 の実装がない) を saxon に変更したことです。しかし、私が実行した最初のレポートで NoClassDefFoundError がスローされました:
java.lang.NoClassDefFoundError: org/apache/xpath/CachedXPathAPI
at net.sf.jasperreports.engine.util.xml.XalanXPathExecuter.<init>(XalanXPathExecuter.java:45)
at net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory.getXPathExecuter(XalanXPathExecuterFactory.java:39)
at net.sf.jasperreports.engine.util.xml.JRXPathExecuterUtils.getXPathExecuter(JRXPathExecuterUtils.java:85)
at net.sf.jasperreports.engine.data.JRXmlDataSource.<init>(JRXmlDataSource.java:172)
at net.sf.jasperreports.engine.query.JRXPathQueryExecuter.createDatasource(JRXPathQueryExecuter.java:91)
xalan への明示的なバインディングはありませんが、jasperreports には次のプロパティがあります。
# Apache Xalan XPath executers are used by default
net.sf.jasperreports.xpath.executer.factory=net.sf.jasperreports.engine.util.xml.XalanXPathExecuterFactory
このプロパティにより jasper が xalan を使用するようになると思いますが、何が変更できるのかわかりません。パッケージnet.sf.jasperreports.engine.util.xmlを調べたところ、saxon に関連するものは見つかりませんでした。jasper は xalan xslt プロセッサでのみ動作しますか? そうでない場合、それを変更する方法は?