WSO2、Birt 4.4.1和Maven

WSO2、Birt 4.4.1和Maven,maven,wso2,birt,Maven,Wso2,Birt,我正在WSO2应用服务器5.2.1上部署一个web服务,它从数据库表加载reportDesign并呈现PDF流,然后将其作为文件存储在传出的ftp服务器目录中。从命令行运行时,所有这些都可以正常工作,但在WSO2上部署为5.2.1时,我很难在中配置EngineConfig的EngineHome属性 我的pom.xml文件(用于Maven)将Birt 4.4.1运行时嵌入到我的aar文件中,然后将其作为更大的car文件的一部分进行部署。我的web服务正确地拾取了Birt jar文件 <bui

我正在WSO2应用服务器5.2.1上部署一个web服务,它从数据库表加载reportDesign并呈现PDF流,然后将其作为文件存储在传出的ftp服务器目录中。从命令行运行时,所有这些都可以正常工作,但在WSO2上部署为5.2.1时,我很难在中配置EngineConfig的EngineHome属性

我的pom.xml文件(用于Maven)将Birt 4.4.1运行时嵌入到我的aar文件中,然后将其作为更大的car文件的一部分进行部署。我的web服务正确地拾取了Birt jar文件

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</version>
            <executions>
                <execution>
                    <id>copy</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                    ....
                            <artifactItem>
                                <groupId>org.eclipse.birt.runtime</groupId>
                                <artifactId>org.eclipse.birt.runtime</artifactId>
                                <version>4.4.1</version>
                                <type>jar</type>
                                <overWrite>false</overWrite>
                                <outputDirectory>${project.build.directory}/aar/lib</outputDirectory>
                            </artifactItem>
                    ...
                    </configuration>
                </execution>
            </executions>
        </plugin>
        ...
    </plugins>
</build>
<dependencies>
    ...
    <dependency>
        <groupId>org.eclipse.birt.runtime</groupId>
        <artifactId>org.eclipse.birt.runtime</artifactId>
        <version>4.4.1</version>
    </dependency>
    ...
</dependencies>
在WSO2应用程序服务器中运行此操作时出现的错误如下:

Can not load the report engine
java.lang.NullPointerException
    at org.eclipse.birt.report.engine.api.ReportEngine.openReportDesign(ReportEngine.java:182)
我在web上看到了许多建议的解决方案,但Tomcat/Axis2环境(WSO2使用的环境)中的大多数解决方案都需要了解ServletContext。我试图从MessageContext中删除ServletContext的尝试没有成功

我希望不必将Birt部署到WSO2中,而是将Birt运行时保存在我部署到WSO2的aar文件中。但我也将求助于将Birt直接部署到WSO2服务器(只需要说明就可以做到这一点,并且仍然可以使上述代码正常工作)


提前感谢您的帮助。

由于BIRT运行时已嵌入到您的包中,因此不需要这一行,请尝试对其进行注释:

config.setEngineHome("");
此外,通常我们需要在创建引擎之前启动BIRT平台,请检查。我知道您说过java代码片段已被剥离,但我们无法猜测您是否忘记了这一点:

Platform.startup( config );
IReportEngineFactory factory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
然而,奇怪的是,在创建引擎时,您没有得到任何异常,可能是它实际上被包装在一个try..catch中?

好的,解决了它

首先,如果运行时引擎已经在您的路径中,EngineHome和BirthHome为null是可以接受的

因此,我的问题是,在使用maven构建时,仅在pom.xml中定义birt运行时是不够的。有许多jar文件不会自动包含在构建中,并且在WSO2环境中找不到

为此,我已将tidy添加到pom.xml文件中,并将以下jar文件添加到我的WSO2_HOME/repository/components/dropins文件夹中:

com.lowagie.text_2.1.7.v201004222200.jar
icu4j-54_1_1.jar
mysql_connector_java_5.1.26_bin_1.0.0.jar
org.apache.batik.bridge_1.6.0.v201011041432.jar
org.apache.batik.css_1.6.0.v201011041432.jar
org.apache.batik.dom.svg_1.6.0.v201011041432.jar
org.apache.batik.dom_1.6.0.v201011041432.jar
org.apache.batik.ext.awt_1.6.0.v201011041432.jar
org.apache.batik.parser_1.6.0.v201011041432.jar
org.apache.batik.pdf_1.6.0.v201105071520.jar
org.apache.batik.svggen_1.6.0.v201011041432.jar
org.apache.batik.transcoder_1.6.0.v201011041432.jar
org.apache.batik.util.gui_1.6.0.v201011041432.jar
org.apache.batik.util_1.6.0.v201011041432.jar
org.apache.batik.xml_1.6.0.v201011041432.jar
org.eclipse.datatools.connectivity.oda_3.4.3.v201405301249.jar
org.w3c.css.sac_1.3.0.v200805290154.jar
org.w3c.dom.smil_1.0.0.v200806040011.jar
org.w3c.dom.svg_1.1.0.v201011041433.jar
org.wso2.carbon.logging.propfile_1.0.0.jar
我还发现有必要将以下代码行放在Platform.startup(config)语句之前:

// The following line is required in wso2:
// http://stackoverflow.com/questions/13241045/why-doesnt-websphere-like-birt
RegistryProviderFactory.releaseDefault();
Platform.startup(config);
我现在正在WSO2环境中成功生成报告。尽管如此,我确信以下几点:

  • 当我构建更多报告时,可能会发现其他丢失的jar文件
  • 我手动添加到wso2 dropins文件夹的一些jar文件可能会被其他pom.xml依赖项替换
因此,更多的尝试和错误将会到来。但现在,我成功地在WSO2中生成了报告

// The following line is required in wso2:
// http://stackoverflow.com/questions/13241045/why-doesnt-websphere-like-birt
RegistryProviderFactory.releaseDefault();
Platform.startup(config);