Как добавить класс org.eclipse.birt.php.birtengine.BirtEngine в JavaBridge?

Я запускаю тест с использованием Apache + PHP, Tomcat и JavaBridge, чтобы попытаться загрузить BIRT и отобразить документ. Это файл PHP:

<?php       
ini_set('display_errors','On');
error_reporting(E_ALL);

require_once('http://127.0.0.1:8081/Bridge/java/Java.inc');
$here = getcwd();

session_start(); 

$here = getcwd();

$ctx = java_context()->getServletContext();
$birtReportEngine = java("org.eclipse.birt.php.birtengine.BirtEngine")->getBirtEngine($ctx);
java_context()->onShutdown(java("org.eclipse.birt.php.birtengine.BirtEngine")->getShutdownHook());

try{

$report = $birtReportEngine->openReportDesign("${here}/TopNPercent.rptdesign");
$task = $birtReportEngine->createRunAndRenderTask($report);
$taskOptions = new java("org.eclipse.birt.report.engine.api.PDFRenderOption");
$outputStream = new java("java.io.ByteArrayOutputStream");
$taskOptions->setOutputStream($outputStream);
$taskOptions->setOutputFormat("pdf");

$task->setRenderOption( $taskOptions );
$task->run();
$task->close();

} catch (JavaException $e) {
 echo $e; //"Error Calling BIRT";

}

//echo $outputStream;
echo java_values($outputStream->toByteArray());
?>

Как только я получаю к нему доступ через Apache + PHP, я получаю следующую ошибку:

<br />
<b>Fatal error</b>:  Uncaught [[o:Exception]:&quot;java.lang.Exception:
 ReferenceClass failed: new org.eclipse.birt.php.birtengine.BirtEngine. Cause: 
java.lang.ClassNotFoundException: org.eclipse.birt.php.birtengine.BirtEngine VM: 
1.7.0_04@http://java.oracle.com/&quot; at:
#-10 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1438)
#-9 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284)
#-8 java.lang.Class.forName0(Native Method)
#-7 java.lang.Class.forName(Unknown Source)
#-6 php.java.bridge.Util.classForName(Util.java:1518)
#-5 php.java.bridge.JavaBridge.CreateObject(JavaBridge.java:445)
#-4 php.java.bridge.Request.handleRequest(Request.java:444)
#-3 php.java.bridge.Request.handleRequests(Request.java:500)
#-2 php.java.bridge.http.ContextRunner.run(ContextRunner.java:145)
#-1 php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60)
#0 http://127.0.0.1:8081/Bridge/java/Java.inc(232): java_ThrowExceptionProxyFactory-&gt;getProxy(3, 'org.apache.cata...', 'T', false)
#1 http://127. in <b>http://127.0.0.1:8081/Bridge/java/Java.inc</b> on line <b>195</b><br />

127.0.0.1:8081 — это сервер Tomcat. Кажется, он не может найти класс "org.eclipse.birt.php.birtengine.BirtEngine". Я скопировал содержимое папки birt-runtime-3_7_2/lib в WEB-INF/lib JavaBridge, но это не помогает. Я пытался найти ответ на разных сайтах, но единственный, я думаю, на самом деле такая же проблема без ответа здесь: ССЫЛКА. Кто-нибудь знает решение этой проблемы или как сделать, чтобы JavaBridge видел этот класс?


person Copperis    schedule 07.05.2012    source источник


Ответы (2)


Я не уверен, что require_once принимает URL в качестве параметров. Вы пробовали использовать абсолютный путь к файлу? Мой выглядит так: «C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/JavaBridge/java/Java.inc», и он работает.

Кроме того, вы можете просмотреть эту статью, в которой подробно описаны шаги правильной настройки:

http://www.birt-exchange.org/org/devshare/deploying-birt-reports/743-calling-birt-from-php/

В любом случае, удачи вам, я знаю, что потерял довольно много волос, когда мне пришлось делать эту настройку.

person Osuwariboy    schedule 10.05.2012

Вы были на правильном пути, скопировав jar-файлы birt_runtime в JavaBridge/WEB-INF/lib. Отсутствующий org.eclipse.birt.php.birtengine.BirtEngine находится внутри файла birtEngine.jar. Поищите его в Интернете, там только один недостающий класс.

person Striker    schedule 06.11.2019