Tomcat NotSerializableException

Я внедрил модуль безопасности с библиотекой SAML, предоставленной OpenSSO, но мой сервер не закрывается должным образом и получает исключение:

java.io.NotSerializableException: com.sun.identity.saml2.assertion.impl.AssertionImpl
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
    at java.util.HashMap.writeObject(HashMap.java:1014)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
    at org.apache.catalina.session.StandardSession.writeObject(StandardSession.java:1671)
    at org.apache.catalina.session.StandardSession.writeObjectData(StandardSession.java:1077)
    at org.apache.catalina.session.StandardManager.doUnload(StandardManager.java:430)
    at org.apache.catalina.session.StandardManager.unload(StandardManager.java:351)
    at org.apache.catalina.session.StandardManager.stopInternal(StandardManager.java:516)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5655)
    at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1575)
    at org.apache.catalina.core.ContainerBase$StopChild.call(ContainerBase.java:1564)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)

Мои вызывающие классы уже сериализованы, как решить эту проблему.


person Phalguni    schedule 25.06.2014    source источник
comment
Обычно это исключение возникает, когда вы пытаетесь сохранить объект класса, который не реализует интерфейс Serializable в файле. Вы говорите, что все ваши классы сериализуемы. Возможно, у вас есть отношения ** HAS-A **, и этот класс не сериализуем.   -  person Oliver    schedule 25.06.2014
comment
У меня было отношение has-a, которое я удалил, но все же я получаю, и это библиотечный класс, это какой-то другой способ его удалить.   -  person Phalguni    schedule 25.06.2014
comment
Ну, если это библиотечный класс, то это может означать проблемы, но всегда есть выход. Извините, я никогда не занимался реализацией OpenSSO, поэтому не могу вам помочь.   -  person Oliver    schedule 25.06.2014
comment
Вы намеренно пытаетесь сериализовать сеансы или Tomcat просто настроен таким образом?   -  person Brandon    schedule 25.06.2014
comment
Нет, я не сериализую сеансы   -  person Phalguni    schedule 25.06.2014


Ответы (1)


Наиболее вероятной причиной этого является то, что вы пытаетесь сохранить полученное утверждение в HttpSession, а файл web.xml вашего веб-приложения имеет элемент ‹distributable/›, который включает кластеризацию сеанса HTTP в вашем контейнере (что приводит к попытке сериализации) .

person Peter Major    schedule 27.06.2014