我正在使用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]:"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/" 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->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文件夹的内容复制到JavaBridge的WEB-INF / lib中,但没有帮助。我曾尝试在各种站点上寻找答案,但是唯一的一个,我认为实际上没有答案的相同问题在这里:LINK。有谁知道解决此问题的方法,或者如何使JavaBridge看到该类?
我不确定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/
无论如何,祝您好运,我知道当我必须进行这种配置时,我掉了不少头发。
通过将birt_runtime jar复制到JavaBridge / WEB-INF / lib,您走在正确的道路上。缺少的org.eclipse.birt.php.birtengine.BirtEngine位于birtEngine.jar文件中。在网络上寻找它,它只有一个缺少的类。