1

誰かが次の問題で私を助けてくれませんか?

昨日、Batik の rasterizertask を使用して SVG のディレクトリを PDF に変換するプロセスを ANT スクリプト (Windows XP、ANT バージョン 1.8.2、ほとんどが XSLT 2.0、Saxon 9 は単に私の ant/lib に追加されたもの) に追加しようとしていました。最初は、ANT にラスタライザー タスクを認識させるのに苦労しましたが、ソースから Batik を再インストールし、次のリンクを使用して、ANT を機能させることができました。

https://mail-archives.apache.org/mod_mbox/xmlgraphics-batik-users/200605.mbox/%3C445B43B9.4010403@harcotechnology.com%3E

これらの指示にはそうするように記載されていませんでしたが、rasterizertask.jar を再コンパイル/再構築する必要があることがわかりました。

補足として、Batik の公式サイトで推奨されているように、batik-rasterizer.jar クラスと rasterizertask クラスへのパスを CLASSPATH に既に追加していました。

ほら、ラスタライザーのタスクが機能していました。残念ながら、ANT スクリプトの rasterizertask に続くすべての XSLT 2.0 タスクが機能しなくなりました。私が知る限り、私が行ったことが原因で、デフォルトの XSLT プロセッサーが Xalan-j に変更されました。また、Xalan は私の XSLT の多くをサポートしていません。

たとえば、これは Xalan から得られるエラーです (このエラーが発生する理由はわかっています。これが、Saxon を使用する理由です)。

[xslt] Processing D:\workDirs\PLMXML2HeirarchalXML\source\plmxml.xml to D:\workDirs\PLMXML2HeirarchalXML\target\step1.xml
 [xslt] Loading stylesheet D:\workDirs\PLMXML2HeirarchalXML\stylesheets\step1.xsl
 [xslt] D:\workDirs\PLMXML2HeirarchalXML\stylesheets\step1.xsl:10:16: Warning! Created using: Apache Software Foundation, http://xml.apache.org/xalan-j
 [xslt] D:\workDirs\PLMXML2HeirarchalXML\stylesheets\step1.xsl:10:16: Warning! Created using: Apache Software Foundation, http://xml.apache.org/xalan-j
 [xslt] Processing D:\workDirs\PLMXML2HeirarchalXML\target\step1.xml to D:\workDirs\PLMXML2HeirarchalXML\target\step2.xml
 [xslt] Loading stylesheet D:\workDirs\PLMXML2HeirarchalXML\stylesheets\step2.xsl
 [xslt] D:\workDirs\PLMXML2HeirarchalXML\stylesheets\step2.xsl:134:53: Fatal Error! java.lang.ClassCastException: org.apache.xpath.objects.XRTreeFrag cannot be cast to org.apache.xpath.objects.XNodeSet Cause: java.lang.ClassCastException: org.apache.xpath.objects.XRTreeFrag cannot be cast to org.apache.xpath.objects.XNodeSet
 [xslt] Failed to process D:\workDirs\PLMXML2HeirarchalXML\target\step1.xml

BUILD FAILED
D:\workDirs\PLMXML2HeirarchalXML\build.xml:5: Fatal error during transformation

そして、私が見つけて ANT に強制的に Saxon を使用させようとした (つまり、Saxon を CLASSPATH、xslt/factory に追加した) すべての方法で、Xalan ではなく、Saxon が呼び出されるようになりましたが、次のエラーが発生しました。

java.lang.NullPointerException
at org.apache.xerces.parsers.AbstractSAXParser.setContentHandler(Unknown Source)
            at net.sf.saxon.Configuration.reuseStyleParser(Configuration.java:2346)
            at net.sf.saxon.PreparedStylesheet.loadStylesheetModule(PreparedStylesheet.java:261)
            at net.sf.saxon.PreparedStylesheet.prepare(PreparedStylesheet.java:185)
            at net.sf.saxon.TransformerFactoryImpl.newTemplates(TransformerFactoryImpl.java:132)
            at org.apache.tools.ant.taskdefs.optional.TraXLiaison.readTemplates(TraXLiaison.java:300)
            at org.apache.tools.ant.taskdefs.optional.TraXLiaison.createTransformer(TraXLiaison.java:317)
            at org.apache.tools.ant.taskdefs.optional.TraXLiaison.transform(TraXLiaison.java:178)
            at org.apache.tools.ant.taskdefs.XSLTProcess.process(XSLTProcess.java:853)
            at org.apache.tools.ant.taskdefs.XSLTProcess.execute(XSLTProcess.java:389)
            at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
            at org.apache.tools.ant.Task.perform(Task.java:348)
            at org.apache.tools.ant.Target.execute(Target.java:392)
            at org.apache.tools.ant.Target.performTasks(Target.java:413)
            at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
            at org.apache.tools.ant.Project.executeTarget(Project.java:1368)
            at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
            at org.apache.tools.ant.Project.executeTargets(Project.java:1251)
            at org.apache.tools.ant.Main.runBuild(Main.java:811)
            at org.apache.tools.ant.Main.startAnt(Main.java:217)
            at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)
            at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)

したがって、Xalan に処理を任せても、ラスタライザー タスクは機能しますが、以前に機能していた XSLT は機能せず、Saxon を使用すると何も機能しません。ANT 1.8.4 をインストールしようとしましたが、同じ結果が得られます。

このサイトの同様の投稿を含め、見つけたすべてのリソースを使い果たしましたが、すべての解決策は私がすでに試したことを示しているようです.

うまくいけば、これは誰かが私にアドバイスや支援を与えるのに十分な情報です.

ありがとう、キース

4

1 に答える 1

0

ここには、さまざまな Ant リリースでのさまざまな問題の長い歴史があります。(結果として、コマンド ライン インターフェイスを介して Saxon を呼び出すために使用する古い Ant コードがたくさんあります。) しかし、最近の Ant リリースでは、trax ファクトリ メカニズムが適切に機能していると思います。使っていますか

<xslt...>
  <factory name="net.sf.saxon.TransformerFactoryImpl"/>
</xslt>

?

クラスパスを介してどの XSLT プロセッサを使用するかを制御しようとすると、本質的に失敗しやすくなります。これは、Ant だけでなく、あらゆるアプリケーションに当てはまります。そして、Ant がクラスパスを操作する方法には、まだバグがあると思います。少なくとも、より丁寧に言えば、ドキュメントからは明らかでない動作です。

于 2012-06-14T08:01:44.323 に答える