Ik heb een vreemd probleem... ik ben bezig met de implementatie van PayPal en hierbij is een heel mooi voorbeeld geleverd dat werkt met JSP pagina's.
Vanwege verschillende redenen gebruik ik geen JSP pagina's in mijn applicaties maar Servlets. Hierbij loop ik echter tegen een vreemd probleem:
In het voorbeeld wordt het volgende gedaan in de JSP pagina (getest en werkt ook prima):
CallerServices caller = new CallerServices();
session.setAttribute("pp_caller", caller);
Er wordt dus een object geinstantieerd (doet er even niet toe wat voor object) en in de sessie opgeslagen. Dit werkt allemaal uitstekend, op de andere JSP pagina's kan ik dit object ook gewoon weer ophalen.
Nu wil ik dit niet in de JSP pagina doen maar in de servlet, ik doe het volgende in de doPost methode van de servlet: (ook in de doGet wil het niet trouwens)
HttpSession session = req.getSession(false);
CallerServices caller = new CallerServices();
session.setAttribute("pp_caller", caller);
Vervolgens krijg ik de volgende foutmelding:
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1255)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1233)
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
at TestServlet.doPost(TestServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
Het verschil zit hem in het feit dat ik hier even zelf het session attribuut ophaal, in de JSP pagina is deze variabele standaard beschikbaar (hoe deze is geinstantieerd heb ik nog niet kunnen vinden).
Ik begrijp dat een Non-serializable object niet in de sessie gezet kan worden maar het punt is dat het in de JSP pagina (wat naar mijn weten eigenlijk gewoon een servlet is) wel perfect werkt.
Iemand een suggestie?
Vanwege verschillende redenen gebruik ik geen JSP pagina's in mijn applicaties maar Servlets. Hierbij loop ik echter tegen een vreemd probleem:
In het voorbeeld wordt het volgende gedaan in de JSP pagina (getest en werkt ook prima):
CallerServices caller = new CallerServices();
session.setAttribute("pp_caller", caller);
Er wordt dus een object geinstantieerd (doet er even niet toe wat voor object) en in de sessie opgeslagen. Dit werkt allemaal uitstekend, op de andere JSP pagina's kan ik dit object ook gewoon weer ophalen.
Nu wil ik dit niet in de JSP pagina doen maar in de servlet, ik doe het volgende in de doPost methode van de servlet: (ook in de doGet wil het niet trouwens)
HttpSession session = req.getSession(false);
CallerServices caller = new CallerServices();
session.setAttribute("pp_caller", caller);
Vervolgens krijg ik de volgende foutmelding:
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1255)
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1233)
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:129)
at TestServlet.doPost(TestServlet.java:68)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:175)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.jboss.web.tomcat.tc5.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:156)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Unknown Source)
Het verschil zit hem in het feit dat ik hier even zelf het session attribuut ophaal, in de JSP pagina is deze variabele standaard beschikbaar (hoe deze is geinstantieerd heb ik nog niet kunnen vinden).
Ik begrijp dat een Non-serializable object niet in de sessie gezet kan worden maar het punt is dat het in de JSP pagina (wat naar mijn weten eigenlijk gewoon een servlet is) wel perfect werkt.
Iemand een suggestie?