AssertionError com API do BIRT Runtime Engine
Pergunta
Sou novo no BIRT e estou tentando fazer o Report Engine funcionar.Estou usando os trechos de código fornecidos em http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.php
Mas tenho uma exceção estranha:
java.lang.assertionError em org.eclipse.birt.core.framework.platform.startup (plataform.java:86)
e nada no arquivo de log.
Talvez eu tenha perdido alguma coisa na configuração?Alguém poderia me dar uma dica sobre o que posso tentar para fazê-lo funcionar?
Aqui está o código que estou usando:
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( );
}
}
Solução
Apenas um pensamento, mas eu me pergunto se o seu uso de uma barra ao definir o logger está causando um problema? em vez de
config.setLogConfig("d:/temp", Level.FINEST);
você deve usar
config.setLogConfig("/temp", Level.FINEST);
ou
config.setLogConfig("d:\\temp", Level.FINEST);
Finalmente, eu percebo que este é apenas um código de exemplo, mas você certamente vai querer dividir o seu código de inicialização plataforma para fora de sua corrida e tornar tarefa. O arranque da plataforma é muito caro e deve ser feito apenas uma vez por sessão.
Eu tenho um par de projetos Eclipse que são configuração em um servidor Subversion que demonstram como usar o Relatório Engine API (REAPI) eo Design Motor API (DEAPI) que você pode achar útil como seu código fica mais complicado.
Para obter os exemplos que você vai precisar tanto o Subclipse ou os plugins subversivo e então você vai precisar para se conectar à seguinte repositório:
http://longlake.minnovent.com/repos/birt_example
Os projetos que você precisa são:
birt_api_example
birt_runtime_lib
script.lib
Você pode precisar ajustar alguns dos locais de arquivo na classe BirtUtil, mas acho que a maioria dos locais de arquivo são caminho relativo. Há mais informações sobre como usar os projectos exemplos no meu blog em http: /birtworld.blogspot.com. Em particular, este artigo deve ajudar: Testing e depurar de Relatórios
Outras dicas
Eu tive o mesmo erro que um par de meses atrás. Eu não tenho certeza do que realmente fixa-lo, mas minha aparência código como o seguinte:
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);
Talvez você possa resolver o seu problema, comparando este trecho de código e seu próprio código. btw minha PATH_TO_ENGINE_HOME é "/ WEB-INF / plataforma". [Editar] Eu usei o -folder completa "plataforma" do WebViewerExample do birt-runtime-2_1_1. atm birt-runtime-2_3_0 é real. [/ edit]
Se isso não ajudar, por favor dar mais alguns detalhes (por exemplo, um trecho de código).