Java 串行化或串行化会话中的Wicket StackOverflower错误

Java 串行化或串行化会话中的Wicket StackOverflower错误,java,serialization,wicket,stack-overflow,Java,Serialization,Wicket,Stack Overflow,我正在使用Wicket 6.15,在我的程序中出现以下异常 java.lang.StackOverflowError at java.lang.Exception.<init>(Exception.java:102) at java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:89) at java.lang.reflect.Invocatio

我正在使用Wicket 6.15,在我的程序中出现以下异常

java.lang.StackOverflowError
    at java.lang.Exception.<init>(Exception.java:102)
    at java.lang.ReflectiveOperationException.<init>(ReflectiveOperationException.java:89)
    at java.lang.reflect.InvocationTargetException.<init>(InvocationTargetException.java:72)
    at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:398)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.checkFields(CheckingObjectOutputStream.java:645)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.internalCheck(CheckingObjectOutputStream.java:569)
    at org.apache.wicket.core.util.objects.checker.CheckingObjectOutputStream.check(CheckingObjectOutputStream.java:361)
...
我不知道是什么导致了wicket core中的堆栈溢出

我搜索这个异常,发现异常的这些部分属于序列化。所以我检查了我所有的对象,所有的对象都实现了可序列化

另一个有趣的问题是,这个异常不是第一次发生的,它发生在我尝试渲染组件2或3次之后


任何帮助都将不胜感激。

可能的问题是,您在会话中存储的对象中存在自包含对象或可能的配对引用循环。
很抱歉,我无法发表评论,但我想帮助您。

补充您自己的观察,即CheckingObjectOutputStream仅在出现错误后使用:CheckingObjectOutputStream应捕获循环引用,但如果要序列化的对象具有错误的equals方法,此保护措施可能会失败-您能检查一下吗


除此之外,我的想法是CheckingObjectOutputStream可能希望使用getter方法而不是直接访问字段,因此每次实际创建新对象的getter方法将生成一个无限的、而不是循环的数据结构。然而,据我所知,CheckingObjectOutputStream代码不使用getter方法,而是直接访问字段,因此我认为这可能不是问题的原因。

正如wicket邮件列表中所回答的,wicket仅在正常序列化失败时才使用CheckingObjectOutputStream。我发现这个对象没有实现可序列化,问题就解决了。但我不知道为什么会发生StackOverflower错误。