Вопрос

Я новичок в BIRT и пытаюсь запустить механизм создания отчетов.Я использую фрагменты кода, представленные в http://www.eclipse.org/birt/phoenix/deploy/reportEngineAPI.php

Но у меня есть странное исключение:

java.lang.Ошибка утверждения в 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( );
        }
    }
Это было полезно?

Решение

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

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

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

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

или

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

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

У меня есть пара проектов Eclipse, настроенных на сервере Subversion, которые демонстрируют, как использовать API Report Engine (REAPI) и API Design Engine (DEAPI), которые могут оказаться полезными по мере усложнения вашего кода.

Чтобы получить примеры, вам понадобятся либо Subclipse, либо Subversive плагины, а затем вам нужно будет подключиться к следующему репозиторию:

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

Проекты, которые вам нужны, это:

birt_api_example
birt_runtime_lib
script.lib

Возможно, вам потребуется настроить некоторые расположения файлов в классе BirtUtil, но я думаю, что большинство расположений файлов имеют относительный путь.Более подробная информация о том, как использовать проекты examples, есть в моем блоге по адресу http:/birtworld.blogspot.com.В частности, эта статья должна помочь: Тестирование и отладка отчетов

Другие советы

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

        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);

Возможно, вы сможете решить свою проблему, сравнив этот фрагмент кода и свой собственный код.кстати, мой ПУТЬ К_ИНЖЕНЕРНОМУ дому - "/WEB-INF/platform".[редактировать]Я использовал полную папку "платформа" из WebViewerExample birt-runtime-2_1_1.atm birt-runtime-2_3_0 актуален.[править / править код]

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top