【问题标题】:class not found FOP找不到类 FOP
【发布时间】:2012-10-09 13:43:22
【问题描述】:

您好,我正在尝试使用 FOP 将 xml 文件转换为 pdf,但我一直遇到错误,现在我遇到了错误

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/xmlgraphics/io/ResourceResolver
at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:122)
at org.apache.fop.apps.FopFactory.newInstance(FopFactory.java:132)
at run.ExampleFO2PDF.main(ExampleFO2PDF.java:62)

我在构建路径中有 FOP 库以及 xmlgraphicscommons loggingAvalon 框架

这是我要运行的代码

        import java.io.BufferedOutputStream;
        import java.io.File;
        import java.io.FileNotFoundException;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.OutputStream;

        import javax.xml.transform.Result;
        import javax.xml.transform.Source;
        import javax.xml.transform.Transformer;
        import javax.xml.transform.TransformerConfigurationException;
        import javax.xml.transform.TransformerException;
        import javax.xml.transform.TransformerFactory;
        import javax.xml.transform.sax.SAXResult;
        import javax.xml.transform.stream.StreamSource;

        import org.apache.fop.apps.*;
        import org.xml.sax.SAXException;

       public class pdf{
        public static void main(String[] args) throws SAXException, IOException, TransformerException
  {
        FopFactory fopFactory = FopFactory.newInstance(new File("."));
                OutputStream out = new BufferedOutputStream(new FileOutputStream(new File("D:/temp/myfile.pdf")));
                try {
                  Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);
                  TransformerFactory factory = TransformerFactory.newInstance();
                  Transformer transformer = factory.newTransformer(); // identity transformer
                  Source src = new StreamSource(new File("D:/temp/test.xml"));
                  Result res = new SAXResult(fop.getDefaultHandler());
                  transformer.transform(src, res);
                } finally {
                  //Clean-up
                  out.close();
                }
           }

    }

【问题讨论】:

  • 请告诉我们您是如何运行代码的。看起来你的类路径中没有 xmlgraphics。

标签: java apache-fop


【解决方案1】:
abstract interface org.apache.fop.apps.MimeConstants implements org.apache.xmlgraphics.util.MimeConstants

org.apache.xmlgraphics.util.MimeConstants 属于 xmlgraphics-commons-1.5.jar。只需在您的类路径中包含 xmlgraphics-commons-1.5.jar 即可解决问题。

【讨论】:

  • 根据问题,缺失的类是org/apache/xmlgraphics/io/ResourceResolver。这包含在xmlgraphics-commons-1.5.jar 中,因此包含此 jar 将不会修复 OP 的问题。
【解决方案2】:

我猜你已经想出了这个 - 但无论如何对于那些还没有的人: FOP 1.1 的主干确实有引用 xmlgraphics.io.ResourceResolver 的 FopConfParser

http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/src/java/org/apache/fop/apps/FopConfParser.java?view=markup

而且xmlgraphics commons的主干确实有ResourceResolver:

http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/src/java/org/apache/xmlgraphics/io/ResourceResolver.java?view=log

因此,作为解决方案,更新到主干!快乐编码:)

【讨论】:

    【解决方案3】:

    确实是老线程,但我花了很长时间才解决这个问题,所以从 FOP 1.1 迁移到 2.0 时,在 pom 中进行了这样的更改:

    来自:

    <dependency>
        <groupId>org.apache.xmlgraphics</groupId> 
        <artifactId>fop</artifactId> 
        <version>1.1</version>
    </dependency>
    

    到:

            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>fop</artifactId>
                <version>2.0</version>
                <exclusions>
                    <exclusion>                  
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>xmlgraphics-commons</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-svg-dom</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-bridge</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-awt-util</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-gvt</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-transcoder</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-extension</artifactId>
                    </exclusion>  
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>batik-ext</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>xmlgraphics-commons</artifactId>
                <version>2.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-svg-dom</artifactId>
                <version>1.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-bridge</artifactId>
                <version>1.8</version>
            </dependency>    
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-awt-util</artifactId>
                <version>1.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-gvt</artifactId>
                <version>1.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-transcoder</artifactId>
                <version>1.8</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.apache.xmlgraphics</groupId>
                        <artifactId>fop</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-extension</artifactId>
                <version>1.8</version>
            </dependency>
            <dependency>
                <groupId>org.apache.xmlgraphics</groupId>
                <artifactId>batik-ext</artifactId>
                <version>1.8</version>
            </dependency>

    【讨论】:

    • 您能描述一下您所做的更改吗?变化涉及从一个点到另一个点的移动。我只看到你改变的结果。很高兴看到一个增量。
    • 对不起,我认为这很明显,&lt;groupId&gt;org.apache.xmlgraphics&lt;/groupId&gt; &lt;artifactId&gt;fop&lt;/artifactId&gt; &lt;version&gt;1.1&lt;/version&gt;
    • 为了完成这个话题,我还改变了 fopFactory 创建 - 从:FopFactory fopFactory = FopFactory.newInstance(); fopFactory.setStrictValidation(false); fopFactory.getFontManager();FopFactoryBuilder builder = new FopFactoryBuilder(new File(".").toURI()); builder.setStrictFOValidation(false); FopFactory fopFactory = builder.build();
    【解决方案4】:

    旧线程,为了完整性增加了一点。

    我在从 0.92b 更新到 FOP 1.1 时遇到了类似的问题,但找不到 MimeConstants 类。

    我通过使用我正在使用的 FOP 版本的源分发中的 xmlgraphics-commons 版本解决了这个问题。

    尝试使用构建您的 FOP 版本时使用的 xmlgraphics-commons jar,该 jar 可以在 FOP 源代码分发的 lib 文件夹中找到。

    【讨论】:

      【解决方案5】:

      我找不到xmlgraphics jar,但我确实找到了xmlgraphics-commons。你是这个意思吗?

      从我上面链接的页面看来,它似乎不包含org.apache.xmlgraphics.io 包,但它确实包含org.apache.xmlgraphics.util.io。也许你的意思是那个?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多