序列化java。木卫一。重新启动Vaadin应用程序时引发NotSerializableException
重新启动Tomcat时,出现以下错误:
2014;10;01; 15;49;47;055; WARN; com.vaadin.event.ListenerMethod;[localhost-startStop-2]; Error in serialization of the application: Class com.aaa.bbb.MyServlet$1 must implement serialization.
2014;10;01; 15;49;47;055; WARN; org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/my-vaadin];[localhost-startStop-2]; Cannot serialize session attribute com.vaadin.server.VaadinSession.MyServlet for session ...
java.io.NotSerializableException: org.apache.catalina.loader.WebappClassLoader
at java.io.ObjectOutputStream.writeObject0(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeObject0(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeObject0(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.writeObject0(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) ~[na:1.6.0_31]
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source) ~[na:1.6.0_31]
at com.vaadin.event.ListenerMethod.writeObject(ListenerMethod.java:88) ~[vaadin-server-7.2.7.jar:7.2.7]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.6.0_31]
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.6.0_31]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.6.0_31]
at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.6.0_31]
...
# 1 楼答案
警告指出匿名内部类(在
MyServlet
类内)必须实现序列化。我的servlet类只包含一个匿名内部类,它实现了Serializable
,并有一个serialVersionUID
:经过一番研究,我找到了解决办法:NotSerializableException on anonymous class
因此,我们必须将匿名内部类更改为静态嵌套类:
或者,如果反序列化后不需要多个对象: