您好,我的报告在我的本地计算机上正常运行。我正在使用eclipse birt和birt viewer app。当我在云计算机上部署(我们带到互联网上)时,报告pdf没有显示,而是显示以下错误。可能是什么问题?
我的localhost操作系统是windows7。云服务器是linux。我们正在使用birt4.3。工作环境是tomcat7,mysql数据库。我们正在使用pojodata源生成报告。请帮助我解决这个问题。感谢你。
org.eclipse.birt.report.exception.ViewerException:没有可用的报表设计对象。 在org.eclipse.birt.report.context.ViewerAttributeBean .__ init(ViewerAttributeBean.java:226) at org.eclipse.birt.report.context.BaseAttributeBean.init(BaseAttributeBean.java:230) 在org.eclipse.birt.report.context.ViewerAttributeBean。(ViewerAttributeBean.java:118) 在org.eclipse.birt.report.context.BirtContext .__ init(BirtContext.java:44) 在org.eclipse.birt.report.context.BaseContext。(BaseContext.java:69) 在org.eclipse.birt.report.context.BirtContext。(BirtContext.java:30) 在org.eclipse.birt.report.servlet.ViewerServlet .__ getContext(ViewerServlet.java:150) 在org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:243) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 在org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 在org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:122) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749) 在org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:487) 在org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:412) 在org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:339) 在com.zedlabs.birt.BIRTFilterForFrameworks.doFilter(BIRTFilterForFrameworks.java:34) 在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936) 在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 在org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:310) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615) 在java.lang.Thread.run(Thread.java:744)
答案 0 :(得分:1)
BIRT运行时无法找到您的rptdesign文件(报告)。您需要确保已配置BIRT主页。您不需要在基于Eclipse的应用程序中将BIRT设置为home,这就是它在IDE中适用于您的原因。这个link到Actuate可以帮助您设置报告引擎。
Actuate对BIRT家庭及其使用方式的描述:
BIRT主页是BIRT插件和库的位置,是报告引擎所需的关键属性。报表引擎无法解析报表设计,也无法在没有定义BIRT主页的情况下呈现报表。对于独立应用程序,BIRT主目录是文件系统位置的绝对路径。对于从应用程序服务器上的Web归档(.war)文件运行的应用程序,BIRT主目录是WAR文件中的相对路径。
对于独立应用程序,请使用以下技术之一:
1 - 使用参数作为BIRT主目录的路径调用EngineConfig.setBIRTHome(),例如:
config.setBIRTHome( "C:/birt-runtime-<version>/ReportEngine" );
2 - 在应用程序环境中,设置BIRT_HOME和CLASSPATH变量以访问所需的库。例如,在Windows批处理文件中,在启动独立应用程序之前包含与以下命令类似的命令:
set BIRT_HOME="C:\birt-runtime-<version>\ReportEngine"
SET CLASSPATH=%BIRT_HOME%\<required library 1>;%BIRT_HOME%\<required library 2 and so on>;%CLASSPATH%
要开发使用BIRT_HOME环境变量的应用程序,请在Eclipse Run对话框的VM参数中设置BIRT_HOME。例如,在VM参数中,键入类似于以下行的文本:
-DBIRT_HOME="C:\birt-runtime-<version>\ReportEngine"
对于已部署的Web应用程序,请使用以下技术之一:
1 - 如果应用程序在文件系统中有一个位置,请使用servlet上下文查找BIRT主目录的实际路径,例如:
config.setBIRTHome( servletContext.getRealPath( "/WEB-INF" ) );
2 - 如果应用程序从WAR文件运行,请使用WAR文件根目录中的相对路径,如以下示例所示。此配置使用PlatformServletContext。
config.setBIRTHome( "" );
<强>另外,强>
BIRT home是BIRT运行时期望查找报告文件的默认位置。如果您选择其他位置来存储报告,则还必须更新报告查看器上下文参数。此外,由Actuate here描述:
要确定报告设计,报告中的图像和日志文件的位置,BIRT报告查看器使用web.xml文件中定义的上下文参数。作为任何这些参数的值提供的路径可以是相对的或绝对的。相对路径相对于BIRT报告查看器应用程序的根文件夹。部署为WAR文件的BIRT报表查看器的可写位置路径必须是绝对路径。
默认情况下,报表设计的相对路径是相对于BIRT报表查看器的根文件夹。将所有报告设计放在此文件夹中,或使用URL中报告设计的完整路径。使用相对路径不方便在WAR文件中部署BIRT报告查看器,因为对报告设计的更改需要重新打包WAR文件。要为报告设计设置不同的位置,请更改BIRT报告查看器应用程序的web.xml文件中的BIRT_VIEWER_WORKING_FOLDER参数
设置报告设计的位置:
<context-param>
<param-name>BIRT_VIEWER_WORKING_FOLDER</param-name>
<param-value></param-value>
</context-param>
<context-param>
<param-name>BIRT_VIEWER_WORKING_FOLDER</param-name>
<param-value>Report_Folder</param-value>
</context-param>
对于这长长的潜在解决方案列表感到抱歉。 Actuate为您设置环境的不同方式提供了许多有用的详细信息。希望这会有所帮助...
答案 1 :(得分:1)
在web.xml中将以下上下文参数的值设置为false:
<context-param>
<param-name>WORKING_FOLDER_ACCESS_ONLY</param-name>
<param-value>false</param-value>
</context-param>
答案 2 :(得分:0)
以下对我有用:
使用新版本的Birt设计器进行编辑,然后使用文本编辑器打开此文件,并将此标签更改为您的版本。
<report xmlns="http://www.eclipse.org/birt/2005/design" version="3.2.17" id="1">
<property name="createdBy">Eclipse BIRT Designer Version 4.3.2.v20140211-1400 Build <4.3.2.v20140218-1056></property>