【问题标题】:HtmlUnit: HtmlPage Serialization ExceptionHtmlUnit:HtmlPage 序列化异常
【发布时间】:2014-01-17 02:54:46
【问题描述】:

在使用 HtmlUnit-2.13 执行在 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)

如果样式属性在Page上且没有注入,则页面可以序列化,没有任何问题。

2013 年 4 月 12 日更新:

我发现问题出在这个字段:

私有地图 styleMap_;

它是 CSSStyleDeclaration 类的成员。 StyleElement 类没有实现 Serializable 接口。

最初,该字段等于null,没有问题发生。但是,一旦执行了 JavaScript 事件,Map 就不再指向 null 并且正在抛出异常。

我做错了吗?该字段应该始终为空,或者之前没有人尝试过序列化该类?

【问题讨论】:

  • 你到底是如何序列化页面的?
  • 我使用下面的sn-p:ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream(bos); out.writeObject(page); } catch (Exception ex) { ex.printStackTrace(System.out); } finally { out.close(); bos.close(); } return bos.toByteArray();

标签: javascript css htmlunit serializable


【解决方案1】:

我遇到了同样的问题。我创建了一个错误,现在已修复:https://sourceforge.net/p/htmlunit/bugs/1569/ 所以你可以使用他们的 SVN 的最新版本,它工作正常!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-18
    • 2010-12-15
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多