【问题标题】:Apache FOP 1.1 > 2.1 MigrationApache FOP 1.1 > 2.1 迁移
【发布时间】:2016-02-11 20:28:58
【问题描述】:

我的任务是迁移一个使用 Apache FOP 1.1 的旧 Java 应用程序。我想使用最新的 FOP 版本 2.1,但设置 FOP 的代码有问题。

这是我们使用 1.1 API 的原始代码:

FopFactory fopFactory = FopFactory.newInstance();
ByteArrayOutputStream out = new ByteArrayOutputStream();
ConfigurationDataUtility configurationData = new ConfigurationDataUtility();

    try
    {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

这是使用 2.1 API 的新代码:

    InputStream is = getClass().getClassLoader().getResourceAsStream("fop.xconf");
    FopConfParser parser = new FopConfParser(is, new java.net.URI(".")); //parsing configuration  
    FopFactoryBuilder builder = parser.getFopFactoryBuilder(); //building the factory with the user options
    FopFactory fopFactory = builder.build();
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    ConfigurationDataUtility configurationData = new ConfigurationDataUtility();

    try
    {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, out);

遗憾的是,FOP 在其网站上的文档非常少,其中大部分是针对 1.1 版的。上面的代码是从他们的页面中获取的目录中说明如何从 1.1 迁移到 2.1 的部分,所以我认为它是正确的。

https://xmlgraphics.apache.org/fop/2.1/upgrading.html

问题是当这个新代码被执行时,在构造new FopConfParser的那一行抛出了如下异常:

Caused by: java.lang.Error: Unable to setup SAX parserjava.lang.ClassCastException: __redirected.__SAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory
    at org.apache.avalon.framework.configuration.DefaultConfigurationBuilder.<init>(DefaultConfigurationBuilder.java:112)
    at org.apache.avalon.framework.configuration.DefaultConfigurationBuilder.<init>(DefaultConfigurationBuilder.java:83)
    at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:146)
    at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:88)
    at org.apache.fop.apps.FopConfParser.<init>(FopConfParser.java:103)
    at xmltools.PDFGenerator.generatePDF(PDFGenerator.java:73)
    at defect.DefectServlet.generateDefectPrintablePdf(DefectServlet.java:703)
    ... 35 more

我们正在运行 Wildfly 9 作为我们的服务器。因此,我在 FOP 的 module.xml 文件中添加了以下内容,因为没有它们我得到 ClassNotFound 异常:

    <dependencies>
        <module name="org.apache.avalon" />
        <module name="org.xml.sax" />
        <module name="org.apache.xmlgraphics" />
    </dependencies>

我已将以下内容添加到我的 JVM 启动中,希望它能更清楚地说明情况,但它没有:

-Djaxp.debug=1

我已经研究了 3 天的大部分时间,但没有取得任何进展。任何建议将不胜感激。

谢谢。

【问题讨论】:

    标签: apache sax apache-fop wildfly-9


    【解决方案1】:

    以这种方式更改与解析器相关的几行对我有用:

    File xconf = new File("\\myapp\\conf\\fop.xconf"); 
    FopConfParser parser = new FopConfParser(xconf);
    FopFactoryBuilder builder = parser.getFopFactoryBuilder();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-30
      • 2012-10-28
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多