Не уверен, поможет ли это, но ваша оскорбительная строка:
IReportEngine engine = factory.createReportEngine(conf);
Мы больше не кодируем наши собственные веб-приложения для BIRT (мы используем веб-приложение, предоставленное другой частью компании), но копая наш старый код, мы обнаружили два различия между тем, что у нас было, и тем, что у вас есть. Является ли один из них исправлением, вы должны проверить сами. Все заботы, никакой ответственности: -)
Различия:
После установки движка конфигурации журнала дома, но перед запуском платформы, мы также настроили эмиттер HTML и контекст платформы:
HTMLEmitterConfig emitterConfig = new HTMLEmitterConfig();
emitterConfig.setActionHandler (new HTMLActionHandler());
HTMLServerImageHandler imageHandler = new HTMLServerImageHandler();
emitterConfig.setImageHandler (imageHandler);
conf.getEmitterConfigs().put ("html", emitterConfig);
IPlatformContext context = new PlatformServletContext( svrContext );
conf.setPlatformContext( context );
Имейте в виду, что мы работали в сервлете, а не как часть отдельного приложения. Так что вам, вероятно, понадобится:
IPlatformContext context = new PlatformFileContext( svrContext );
для контекста платформы. Сделайте это и посмотрите, работает ли это. Почему-то я в этом сомневаюсь, так как PlatformFileContext используется по умолчанию. Эмитент может быть что-то, чтобы рассмотреть, хотя.
Единственная другая возможность, которую я могу предложить, - это на самом деле получить исходный код для BIRT (вашей конкретной сборки) и взглянуть на ошибочные строки в трассировке стека. Надеемся, вы сможете выяснить, какой параметр может вызывать проблему.
Например, последняя строка ReportEngine.java:784
является частью:
void cacheOpenedDocument( ReportDocumentReader document ) {
synchronized ( openedDocuments ) {
LinkedEntry<ReportDocumentReader> entry
= openedDocuments.add( document );
document.setEngineCacheEntry( entry ); // << line 784
}
}
так что почти наверняка, что переданный document
был нулевым. Вам нужно будет проследить это через различные слои, чтобы попытаться выяснить, что происходит.
Это может быть довольно сложно, и в этом случае вам может быть лучше просто поднять отчет об ошибке и позволить экспертам справиться с этим. Или напрямую хлопотайте по Джейсону Уэзерсби, если вы можете получить свои грязные маленькие руки на его адрес электронной почты: -)
Кроме того, вам не нужны эти отвратительные \
символы в ваших путях. Java прекрасно справляется с (например):
conf.setEngineHome("C:/birt-runtime-2_5_2/ReportEngine");