使用BIRT运行时引擎API的AssertionError

时间:2008-09-17 11:20:11

标签: java reporting birt

我是BIRT的新手,我正在尝试让报表引擎运行。我正在使用http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.php

中提供的代码段

但我有一个奇怪的例外:

  

java.lang.AssertionError       在org.eclipse.birt.core.framework.Platform.startup(Platform.java:86)

并且日志文件中没有任何内容。

也许我错过了配置中的一些东西?有人可以给我一个关于我可以尝试让它运行的提示吗?

以下是我正在使用的代码:

public static void executeReport()
    {

        IReportEngine engine=null;
        EngineConfig config = null;

        try{
            config = new EngineConfig( );           
            config.setBIRTHome("D:\\birt-runtime-2_3_0\\ReportEngine");
            config.setLogConfig("d:/temp", Level.FINEST);
            Platform.startup( config );
            IReportEngineFactory factory = (IReportEngineFactory) Platform
            .createFactoryObject( IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY );
            engine = factory.createReportEngine( config );      

            IReportRunnable design = null;
            //Open the report design
            design = engine.openReportDesign("D:\\birt-runtime-2_3_0\\ReportEngine\\samples\\hello_world.rptdesign"); 
            IRunAndRenderTask task = engine.createRunAndRenderTask(design);         

            HTMLRenderOption options = new HTMLRenderOption();      
            options.setOutputFileName("output/resample/Parmdisp.html");
            options.setOutputFormat("html");

            task.setRenderOption(options);
            task.run();
            task.close();
            engine.destroy();
        }catch( Exception ex){
            ex.printStackTrace();
        }       
        finally
        {
            Platform.shutdown( );
        }
    }

2 个答案:

答案 0 :(得分:2)

几个月前我犯了同样的错误。我不太确定实际修复了什么,但我的代码如下所示:

        IDesignEngine engine = null;
    DesignConfig dConfig = new DesignConfig();
    EngineConfig config = new EngineConfig();
    IDesignEngineFactory factory = null;
    config.setLogConfig(LOG_DIRECTORY, Level.FINE);
    HttpServletRequest servletRequest = (HttpServletRequest) FacesContext.getCurrentInstance()
     .getExternalContext().getRequest();

    String u = servletRequest.getSession().getServletContext().getRealPath("/");
    File f = new File(u + PATH_TO_ENGINE_HOME);

    log.debug("setting engine home to:"+f.getAbsolutePath());
    config.setEngineHome(f.getAbsolutePath());

    Platform.startup(config);
    factory = (IDesignEngineFactory) Platform.createFactoryObject(IDesignEngineFactory.EXTENSION_DESIGN_ENGINE_FACTORY);
    engine = factory.createDesignEngine(dConfig);
    SessionHandle session = engine.newSessionHandle(null);

    this.design = session.openDesign(u + PATH_TO_MAIN_DESIGN);

也许您可以通过比较此代码段和您自己的代码来解决您的问题。顺便说一句,我的PATH_TO_ENGINE_HOME是“/ WEB-INF / platform”。 [edit]我使用了birt-runtime-2_1_1的WebViewerExample中的完整“平台”文件夹。 atm birt-runtime-2_3_0是实际的。[/ edit]

如果这没有帮助,请提供更多详细信息(例如代码段)。

答案 1 :(得分:1)

只是一个想法,但我想知道在设置记录器时是否使用正斜杠会导致问题?而不是

config.setLogConfig("d:/temp", Level.FINEST);

你应该使用

 config.setLogConfig("/temp", Level.FINEST);

  config.setLogConfig("d:\\temp", Level.FINEST);

最后,我意识到这只是一些示例代码,但您肯定希望将平台启动代码从运行和渲染任务中分离出来。平台启动非常昂贵,每个会话只应该执行一次。

我在Subversion服务器中设置了几个Eclipse项目,演示了如何使用报表引擎API(REAPI)和设计引擎API(DEAPI),当您的代码变得更复杂时,这些项目可能会很有用。

要获取示例,您需要Subclipse或Subversive插件,然后您将需要连接到以下存储库:

http://longlake.minnovent.com/repos/birt_example

您需要的项目是:

birt_api_example
birt_runtime_lib
script.lib

您可能需要调整BirtUtil类中的某些文件位置,但我认为大多数文件位置都是相对路径。有关如何在我的博客上使用示例项目的更多信息,请访问http:/birtworld.blogspot.com。特别是本文应该有所帮助:Testing And Debug of Reports