AssertionError с API BIRT Runtime Engine - PullRequest
       26

AssertionError с API BIRT Runtime Engine

0 голосов
/ 17 сентября 2008

Я новичок в 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 ]

2 голосов
/ 17 сентября 2008

У меня была та же ошибка пару месяцев назад. Я не совсем уверен, что на самом деле это исправить, но мой код выглядит следующим образом:

        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". [править] Я использовал полную папку "platform" из примера WebViewer из birt-runtime-2_1_1. atm birt-runtime-2_3_0 актуален. [/ edit]

Если это не поможет, приведите еще несколько подробностей (например, фрагмент кода).

1 голос
/ 18 сентября 2008

Просто мысль, но мне интересно, вызывает ли проблема использование косой черты при настройке регистратора? вместо

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

вы должны использовать

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

или

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

Наконец, я понимаю, что это всего лишь пример кода, но вам наверняка захочется отделить код запуска платформы от задачи запуска и рендеринга. Запуск платформы очень дорогой и должен выполняться только один раз за сеанс.

У меня есть пара проектов Eclipse, которые настраиваются на сервере Subversion, которые демонстрируют, как использовать 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. В частности, эта статья должна помочь: Тестирование и отладка отчетов

...