I get
Aug 25, 2017 3:35:42 PM org.apache.catalina.session.StandardManager startInternal
SCHWERWIEGEND: Exception loading sessions from persistent storage
java.lang.ClassCastException: java.lang.String cannot be cast to java.io.ObjectStreamClass
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1511)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1771)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1997)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1921)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1798)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1350)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:370)
at org.apache.catalina.session.StandardSession.readObject(StandardSession.java:1608)
at org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:1074)
at org.apache.catalina.session.StandardManager.doLoad(StandardManager.java:259)
at org.apache.catalina.session.StandardManager.load(StandardManager.java:176)
at org.apache.catalina.session.StandardManager.startInternal(StandardManager.java:465)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5593)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:899)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:875)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1091)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1980)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
and
((HttpSession) getContextProperty("Session")).setAttribute(name, value);
throws
Fri Aug 25 15:35:47 GMT+01:00 2017
Server Exception. ID: 72acb94e_15e19d20417_12
java.lang.NullPointerException
at de.supportgis.gdi.gdigui.GDIApplication.setSessionAttribute(GDIApplication.java:187)
at de.supportgis.gdi.gdigui.GDIApplication.setCurrentUserLocale(GDIApplication.java:156)
at de.supportgis.gdi.gdigui.components.StandardContentPanel.getLS(StandardContentPanel.java:236)
at de.supportgis.gdi.gdigui.content.Login.<init>(Login.java:68)
at de.supportgis.gdi.gdigui.GDIApplication.init(GDIApplication.java:62)
at nextapp.echo.app.ApplicationInstance.doInit(ApplicationInstance.java:288)
at nextapp.echo.webcontainer.UserInstance.prepareApplicationInstance(UserInstance.java:484)
at nextapp.echo.webcontainer.ComponentInputProcessor.process(ComponentInputProcessor.java:160)
at nextapp.echo.webcontainer.ClientMessage.process(ClientMessage.java:194)
at nextapp.echo.webcontainer.InputProcessor.process(InputProcessor.java:163)
at nextapp.echo.webcontainer.Synchronization.process(Synchronization.java:121)
at nextapp.echo.webcontainer.service.SynchronizeService.service(SynchronizeService.java:78)
at nextapp.echo.webcontainer.WebContainerServlet.process(WebContainerServlet.java:432)
at de.supportgis.gdi.gdigui.StartServlet.process(StartServlet.java:37)
at nextapp.echo.webcontainer.WebContainerServlet.doPost(WebContainerServlet.java:316)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
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 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:221)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
I guess this is no duplicate, because I checked and applied every answer in exception loading sessions from persistent storage with no luck, for example:
I have no broken symlinks:
find / -xtype l 2>/dev/null
returns nothing relevant.
I guess it is a file system rights problem coming from an apt dist-upgrade
. Do I really have to reinstall the hole server?
The method GDIApplication.setSessionAttribute
(second stacktrace) calls getContextProperty("Session")
which leads to an NPE?
The method ApplicationInstance.getContextProperty("Session")
belongs to the Echo Framework (https://github.com/echo3/echo3). I'm not exactly sure how it gets hold of the Session object, but the ClassCastException in the first stacktrace might interfere with it.
Try replacing
((HttpSession) getContextProperty("Session")).setAttribute(name, value);
with
Connection conn = WebContainerServlet.getActiveConnection();
conn.getRequest().getSession().setAttribute(name, value);
This gives you access to the current ServletRequest and lets you retrieve the session using Java's ServletRequest.getSession()
method, which will create the session if it doesn't yet exist.
As for the ClassCastException during session recreation: I don't know any other way than the ones you have already tried. But if the above tip works, these exceptions may still be annoying, but could turn out to be harmless. I confess, I normally ignore them when they appear...