BIRT Report Viewer in Tomcat works with toolbar disabled, but fails with it enabled. Any ideas what's going on?

huangapple 未分类评论58阅读模式
英文:

BIRT Report Viewer in Tomcat works with toolbar disabled, but fails with it enabled. Any ideas what's going on?

问题

我们有一个Tomcat webapp,其中包含BIRT报表。我并不知道我们正在使用的BIRT版本是什么,但问题发生在一个单独的安装实例(众多实例中的一个),该实例在Tomcat 7.0.93上运行,使用64位的Java 8,在IBM Midrange机器上运行。

在这个安装实例中,如果禁用BIRT查看器工具栏,报表可以正常运行。

但是如果启用了工具栏,我们就会收到一个空指针异常,产生以下堆栈跟踪:

java.lang.NullPointerException
   at org.eclipse.birt.report.engine.api.impl.RenderTask.initRenderTask(RenderTask.java:153)
   at org.eclipse.birt.report.engine.api.impl.RenderTask.(RenderTask.java:115)
   at org.eclipse.birt.report.engine.api.impl.RenderTask.(RenderTask.java:98)
   at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.createRenderTask(ReportEngineHelper.java:502)
   at org.eclipse.birt.report.engine.api.impl.ReportEngine.createRenderTask(ReportEngine.java:515)
   at org.eclipse.birt.report.service.ReportEngineService.createRenderTask(ReportEngineService.java:1635)
   ...

这在我们的其他任何安装实例上都没有发生,这让我们的Web应用团队感到困惑。

其他可能相关的信息:

  1. 这似乎没有在任何Tomcat日志中记录任何内容。
  2. 无论是Tomcat管理器还是在Tomcat服务器作业上执行WRKJVMJOB,都没有显示出作业在堆空间不足的情况。
英文:

We have a Tomcat webapp, with BIRT reports in it. Offhand, I don't know what version of BIRT we are using, but the problem is occurring on a single installation (one of many) that is in Tomcat 7.0.93, running on a 64-bit Java 8, on an IBM Midrange box.

On this one installation, if the BIRT viewer toolbar is disabled, the report runs just fine.

But if that toolbar is enabled, then we get a null pointer exception, producing this stacktrace:

java.lang.NullPointerException
   at org.eclipse.birt.report.engine.api.impl.RenderTask.initRenderTask(RenderTask.java:153)
   at org.eclipse.birt.report.engine.api.impl.RenderTask.(RenderTask.java:115)
   at org.eclipse.birt.report.engine.api.impl.RenderTask.(RenderTask.java:98)
   at org.eclipse.birt.report.engine.api.impl.ReportEngineHelper.createRenderTask(ReportEngineHelper.java:502)
   at org.eclipse.birt.report.engine.api.impl.ReportEngine.createRenderTask(ReportEngine.java:515)
   at org.eclipse.birt.report.service.ReportEngineService.createRenderTask(ReportEngineService.java:1635)
   at org.eclipse.birt.report.service.ReportEngineService.renderReport(ReportEngineService.java:1537)
   at org.eclipse.birt.report.service.BirtViewerReportService.getPage(BirtViewerReportService.java:204)
   at org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.doExecution(AbstractGetPageActionHandler.java:237)
   at org.eclipse.birt.report.service.actionhandler.AbstractGetPageActionHandler.__execute(AbstractGetPageActionHandler.java:104)
   at org.eclipse.birt.report.service.actionhandler.AbstractBaseActionHandler.execute(AbstractBaseActionHandler.java:90)
   at org.eclipse.birt.report.soapengine.processor.AbstractBaseDocumentProcessor.__executeAction(AbstractBaseDocumentProcessor.java:47)
   at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.executeAction(AbstractBaseComponentProcessor.java:143)
   at org.eclipse.birt.report.soapengine.processor.BirtDocumentProcessor.handleGetPage(BirtDocumentProcessor.java:87)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:90)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
   at java.lang.reflect.Method.invoke(Method.java:508)
   at org.eclipse.birt.report.soapengine.processor.AbstractBaseComponentProcessor.process(AbstractBaseComponentProcessor.java:112)
   at org.eclipse.birt.report.soapengine.endpoint.BirtSoapBindingImpl.getUpdatedObjects(BirtSoapBindingImpl.java:66)
   at sun.reflect.GeneratedMethodAccessor71.invoke(Unknown Source)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
   at java.lang.reflect.Method.invoke(Method.java:508)
   at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:397)
   at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:186)
   at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
   at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
   at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
   at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
   at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:454)
   at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
   at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
   at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.doPost(BirtSoapMessageDispatcherServlet.java:250)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
   at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
   at org.eclipse.birt.report.servlet.BirtSoapMessageDispatcherServlet.service(BirtSoapMessageDispatcherServlet.java:136)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.eclipse.birt.report.filter.ViewerFilter.doFilter(ViewerFilter.java:68)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at com.touchtone.wintouch.WintouchFilter.doFilter(WintouchFilter.java:126)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at com.touchtone.wintouch.security.ContentSecurityPolicyFilter.doFilter(ContentSecurityPolicyFilter.java:186)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
   at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
   at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1137)
   at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
   at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:319)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1160)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
   at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
   at java.lang.Thread.run(Thread.java:811)

This doesn't happen on any of our other installations, it's got our webapp team stumped.

Other potentially relevant information:

  1. This doesn't appear to put anything in any of the Tomcat logs.
  2. Neither the Tomcat manager, nor doing a WRKJVMJOB on the Tomcat server job, show any sign that the job is running short on heap space.

答案1

得分: 0

拦截请求并进行比较,查看标头、URL 参数等是否存在差异,例如使用 Fiddler(或其他拦截代理、TLS 调试日志等)。

Java 14 引入了一个很好的选项,可以使空指针异常更具详细性,但你需要在启动时通过 -XX:+ShowCodeDetailsInExceptionMessages 来启用它。

如果一切都失败了,可以启动带有远程调试套接字的 Tomcat,并使用例如 Eclipse 在任何你想要检查的方法或异常上设置断点。

祝你好运!

英文:

Intercept the requests and compare them to find if there's a difference in headers, url parameters, etc. e.g. with Fiddler (or some other intercepting proxy, TLS debugging logs etc.).

Java 14 introduced a nice option to make NullPointerException more verbose but you need to enable it at startup with -XX:+ShowCodeDetailsInExceptionMessages.

If all else fails run Tomcat with remote debugging socket enabled and use e.g. Eclipse to set a breakpoint on any method or Exception you like to inspect.

Good luck!

huangapple
  • 本文由 发表于 2020年5月5日 05:48:22
  • 转载请务必保留本文链接:https://java.coder-hub.com/61602192.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定