2009-04-26 2 views
4

Я унаследовал некоторый код и получаю сообщение об ошибке при попытке запустить его. Ошибка ниже:java.lang.IllegalArgumentException: setAttribute: атрибут, не связанный с сериализацией

10:08:32,093 ERROR [MyServlet]:260 - Servlet.service() for servlet MyServlet threw exception 
java.lang.IllegalArgumentException: setAttribute: Non-serializable attribute 
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1270) 
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1248) 
at org.apache.catalina.session.StandardSessionFacade.setAttribute(StandardSessionFacade.java:130) 
at uk.co.my.servlet.MyServlet.doPost(MyServlet.java:121) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
at com.my.ddi.security.SecurityContextServletFilter.doFilter(SecurityContextServletFilter.java:55) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:835) 
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:640) 
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1286) 
at java.lang.Thread.run(Unknown Source) 

Я полагаю, что главная проблема в том, где он бьет мой код в uk.co.my.servlet.MyServlet.doPost (MyServlet.java:172). Строка 121 MyServlet - session.setAttribute («LISTENER», myListener);

объект

Это myListener от следующего класса:

public class myListener { 
    static Log log = LogFactory.getLog(TerminationListener.class.getName()); 
    private boolean shouldCancel = false; 

Как бы идти о том, чтобы избавиться от этой ошибки? Должен ли я использовать ключевое слово transient?

ответ

9

Если вы хотите, чтобы экземпляр myListener был помещен в сеанс, вам необходимо сделать его сериализуемым. То, что может, связано с тем, что некоторые поля преходящи, но тогда эти поля не будут сохранены в сеансе. Вам также необходимо выполнить класс Serializable.

Предлагаю вам ознакомиться с documentation for Serializable, в котором представлено множество подробностей о сериализации.

Смежные вопросы