2012-06-12 56 views
1

有人可以帮我解决以下问题吗?撒克逊在安装蜡染光栅器后停止工作

昨天我试图添加一个进程到我的ANT脚本(Windows XP,ANT版本1.8.2,主要是XSLT 2.0,Saxon 9简单地添加到我的ant/lib中),借此它将SVG目录转换为PDF蜡染的光栅化任务。最初,我让ANT认识rasterizertask很困难,但是在从源代码重新安装Batik之后,在以下链接的帮助下,我能够使其工作。

https://mail-archives.apache.org/mod_mbox/xmlgraphics-batik-users/200605.mbox/%[email protected]%3E

虽然这些指令并没有说明这样做,我发现我需要重新编译/重建rasterizertask.jar。

作为一个方面说明,我也已经在官方网站蜡染推荐添加到我的CLASSPATH的路径蜡染rasterizer.jar和rasterizertask类。

瞧,我的光栅化任务工作。唉,我的ANT脚本中的栅格化任务后面的所有XSLT 2.0任务都停止工作。从我所知道的情况来看,我所做的一些事情导致默认的XSLT处理器被更改为Xalan-j。 Xalan不支持我的XSLT。

例如,这是错误,我从Xalan的获得(我知道为什么我收到此错误,这就是为什么我使用撒克逊):

[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使用撒克逊(即加入撒克逊到CLASSPATH,XSLT /工厂)似乎导致撒克逊被调用,而不是Xalan的,但现在我得到以下错误:

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,但我得到了相同的结果。

我已经用尽了所有我已经找到了资源,包括在这个网站类似的帖子,但所有的解决方案似乎指向的事情我已经试过了。

希望这是足够的信息有人给我一些建议或协助。

感谢, 基思

+0

终于明白了!首先,我删除了光栅化器的CLASSPATH条目,这让Saxon再次工作。 (我不是这方面的专家,所以我不能解释为什么。)但是现在我回到了使用光栅化任务的方式。通过试验和错误,我通过将编译的jar添加到ant/lib(确保在我的ant脚本中更改taskdef/classpath/pathelement/@位置)并添加classname =“org.apache.xalan.processor .TransformerFactoryImpl“添加到栅格化任务。感谢迈克尔凯帮助我走出困境。 – kcstrong

回答

0

还有很长的历史在这里的不同版本的蚂蚁不同的问题。 (因此,我为人们提供了大量的传统Ant代码,通过命令行界面调用Saxon。)但是我相信,通过最近的Ant发布,trax工厂机制​​可以正常工作。您是否使用

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

试图控制其XSLT处理器经由类路径使用在本质上是易出故障的。这适用于任何应用程序,而不仅限于Ant。而且我认为Ant在处理类路径方面还存在一些问题 - 无论如何,它们都是更有礼貌的行为,而这些行为在文档中并不明显。

+0

感谢迈克尔,你的回应让我开始了正确的道路,并且最终我得到了一切正常的工作。 – kcstrong