在使用 HtmlUnit-2.13 执行将样式属性注入(inject) HTML 标记的 JavaScript 函数后,我们无法序列化生成的 HtmlPage,我们收到以下错误:
java.io.NotSerializableException:com.gargoylesoftware.htmlunit.javascript.host.css.CSSStyleDeclaration$StyleElement
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.HashMap.writeObject(Unknown Source)
at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
如果 style 属性在页面上且未注入(inject),则页面可以毫无问题地序列化。
更新于 12/04/2013:
我发现问题出在这个字段:
private Map<String, StyleElement> styleMap_;
它是 CSSStyleDeclaration 类的成员。 StyleElement 类未实现 Serializable 接口(interface)。
最初,该字段等于 null,不会出现任何问题。但是,一旦执行了 JavaScript 事件,Map 不再指向 null 并抛出异常。
我做错了什么吗?该字段应该始终为空,或者之前没有人尝试序列化该类?
最佳答案
我遇到了同样的问题。我创建了一个错误,现在已修复:https://sourceforge.net/p/htmlunit/bugs/1569/ 所以你可以使用他们 SVN 的最新版本,它工作正常!
关于javascript - HtmlUnit:HtmlPage 序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339873/