3

私たちのプロジェクトでは 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 プロセッサでのみ動作しますか? そうでない場合、それを変更する方法は?

4

1 に答える 1

1

Jasperは非常に構成可能です。独自のXPathExecutionFactoryを作成し、適切な環境変数を使用してJasperにプラグインするだけでよいと思います。他の何かのためにサクソンが必要な場合、私は個人的にxalanとsaxonを並行してデプロイします。

于 2012-12-21T07:07:40.233 に答える