在Tomcat的Web应用程序中使用Batik时出现"SAX2 driver class org.apache.crimson.parser.XMLReaderImpl not found"错误。

3
这可能与类路径问题有关,但我目前还不确定,因为在一些机器上我没有遇到这个错误。
堆栈顶部的错误是“SAX2驱动程序类org.apache.crimson.parser.XMLReaderImpl未找到”。为什么我只在某些环境中遇到此错误,而在其他环境中没有?我如何进一步调查和/或修复此问题?
环境:
- Mac或PC上的Jetty == OK - Mac上的Tomcat 5或6 == OK - Win XP上的Tomcat 5或6 == ERROR - CentOS上的Tomcat 6 == ERROR
POM中的版本:
- batik:batik:jar:1.5:compile - net.sf.saxon:saxon:jar:8.7:compile - batik:batik-transcoder:jar:1.6-1:compile - batik:batik-bridge:jar:1.6-1:compile - batik:batik-gvt:jar:1.6-1:compile - batik:batik-awt-util:jar:1.6-1:compile - batik:batik-util:jar:1.6-1:compile - batik:batik-gui-util:jar:1.6-1:compile - batik:batik-ext:jar:1.6-1:compile - xml-apis:xmlParserAPIs:jar:2.0.2:compile - batik:batik-script:jar:1.6-1:compile - batik:batik-svg-dom:jar:1.6-1:compile - batik:batik-dom:jar:1.6-1:compile - batik:batik-css:jar:1.6-1:compile - batik:batik-xml:jar:1.6-1:compile - batik:batik-parser:jar:1.6-1:compile - fop:fop:jar:0.20.5:compile - batik:batik-1.5-fop:jar:0.20-5:compile - xml-apis:xml-apis:jar:1.0.b2:compile - xalan:xalan:jar:2.4.1:compile - xerces:xercesImpl:jar:2.2.1:compile - avalon-framework:avalon-framework:jar:4.0:compile

嗨,马特。我遇到了这个问题。我已经从/WEB-INF/lib中删除了fop,但仍然出现错误。你有没有找到其他相关的问题?干杯! - Caio Cunha
我没有发现任何我记得的其他相关问题(三年前)。我当时使用Maven来打包我的应用程序,因此在我的POM中排除fop构件可以防止Maven打包该构件。如果您仍然遇到错误,请打开您的WAR文件并检查该构件,并确保重新启动Tomcat服务器。 - Matt
我找到了问题所在。我没有部署WAR文件,而且fop中还包括另外两个JAR文件,即batik-fopavalon。我删除了fop.jar,但没有删除batik-fop.jar - Caio Cunha
3个回答

8

谢谢,这非常有用。

在Win 7 / Tomcat 6上遇到了完全相同的“缺少crimson”的问题。通过添加crimson库使其正常工作,但性能很差,非常慢。一个图像转码需要花费大约10-15秒。最终按照您所描述的方法移除了FOP,现在速度真的很快。这是我的POM中的设置:

    <dependency>
        <groupId>batik</groupId>
        <artifactId>batik-transcoder</artifactId>
        <version>1.6-1</version>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>fop</artifactId>
                <groupId>fop</groupId>
            </exclusion>
        </exclusions>
    </dependency>

这对于使Batik插件工作也很有用。 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>batik-maven-plugin</artifactId> <version>1.0-beta-1</version> <dependencies> <dependency> <groupId>batik</groupId> <artifactId>batik-transcoder</artifactId> <version>1.6-1</version> <exclusions> <exclusion> <artifactId>fop</artifactId> <groupId>fop</groupId> </exclusion> </exclusions> </dependency> </dependencies> - Archimedes Trajano

6

事实证明,Apache XML Graphics本身将Crimson添加到类路径中两次。一次是在Apache Batik转码器中,另一次是在Apache FOP中。

由于Tomcat按字母顺序加载库,因此FOP首先包含了Crimson,但是Batik也做了同样的事情。

我从项目POM中排除了FOP,并解决了类路径问题。


如果有人试图从/WEB-INF/lib文件夹中删除文件,则还要删除batik-fop jar。 - Caio Cunha

0

这是一个JDK版本的问题。在这里找到

  • 一些JDK已经包含crimson库,在开发者机器上可以正常工作;
  • 但是一些JDK在用户机器上没有该库并会抛出错误;

请使用以下Maven配置:

<dependency>
    <groupId>batik</groupId>
    <artifactId>batik-transcoder</artifactId>
    <version>1.6-1</version>
</dependency>
<dependency>
    <groupId>crimson</groupId>
    <artifactId>crimson</artifactId>
    <version>1.1.3</version>
</dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接