java.lang.IllegalArgumentException: setAttribute: несериализуемый атрибут - PullRequest
4 голосов
/ 26 апреля 2009

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

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;

Как бы я избавился от этой ошибки? Нужно ли мне использовать временное ключевое слово?

1 Ответ

9 голосов
/ 26 апреля 2009

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

Я предлагаю вам взглянуть на документацию для сериализуемого , в которой подробно рассказывается о сериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...