运行过程中出现 NPE异常

有时候突然会出现下面的错误,也没做什么特别的操作,不清楚引起的原因。一旦出现不重启就没法恢复。

这个我转到英文论坛去。应该是个 issue。

现在经常就是莫名其妙的平台出错了,整个没法用:

16:47:22.627 ERROR com.haulmont.cuba.web.log.AppLog - Exception:
java.lang.NullPointerException: null
at com.haulmont.cuba.web.widgets.CubaImage.attach(CubaImage.java:40) ~[cuba-web-widgets-7.0.7.jar:na]
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:643) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:670) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:643) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:670) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.AbstractClientConnector.attach(AbstractClientConnector.java:643) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.ui.AbstractComponent.attach(AbstractComponent.java:670) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.ui.UI.attach(UI.java:1364) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.ui.UI.setSession(UI.java:499) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:189) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:67) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577) ~[vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425) [vaadin-server-8.6.4-13-cuba.jar:8.6.4-13-cuba]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329) [cuba-web-7.0.7.jar:7.0.7]
at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215) [cuba-web-7.0.7.jar:7.0.7]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [servlet-api.jar:na]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-websocket.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) [cuba-web-7.0.7.jar:7.0.7]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.14]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.14]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.14]
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) [catalina.jar:9.0.14]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.14]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.14]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-coyote.jar:9.0.14]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:9.0.14]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-coyote.jar:9.0.14]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-coyote.jar:9.0.14]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.14]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.14]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

有可能是因为网络断了导致的,网络中断不应该导致服务端彻底死掉,这样的程序没法稳定使用,这个问题比较严重。

这个应该属于个例,在英文社区也没有开发人员反馈过,我们也没有遇到过。这个我们可以帮你排查一下。

描述一下你的运行环境
1 操作系统
2 浏览器
3 是开发环境还是部署环境?

windows10,开发环境,和浏览器没啥关系感觉。你把网络断一下再恢复可能会出现!

测试了一下,没有发现此问题。从堆栈信息来看和 websocket 通讯有关,所以我让让提供一下浏览器版本。另外详细描述一下问题重现的过程。

chrome:75.0.3770.100(正式版本) (64 位)
我也没办法立即重现,每次出现都是服务端运行,浏览器一段时间没访问。然后再去操作界面点一下就出现错误了。有时候这个过程中网络环境发生了变化。

我在英文论坛上反馈了,你可以关注一下


我也遇到了相同的问题!!!

异常点也是这里吗:
at com.haulmont.cuba.web.widgets.CubaImage.attach(CubaImage.java:40) ~[cuba-web-widgets-7.0.7.jar:na]

完全一样的异常!

@jy00882735 @weborld
这个问题还存在吗 ?

我这一直存在,现在的规律是这样的,在开发环境启动后,然后关闭(这时候WEB程序会提示会话过期)。修改代码之后,再启动,然后很长时间不操作WEB,再去操作(点会话过期的提示),这时又会出现一次会话过期的提示,然后再点会话过期的提示,就出这个错误了!

现在在7.0.9可以很容易重现了。后台启动打开界面之后,把浏览器的标签页关掉,然后新开一个标签页输入地址访问,就会出现这个错误了!应该是Sesion导致的,另外请参看另外一个严重的问题,视乎有关联:用不同的浏览器打开后台直接报错!

感谢反馈,我试一下。

这个问题和 用不同的浏览器打开后台直接报错! 相关吗?已经解决了吗?请及时反馈一下。

7.1默认的超时时间好像边长了,放了2个小时没操作也没提示超时过期,目前还没出现这个问题

和超时设置没有关系,CUBA 应用是不会超时的。