После выполнения функции JavaScript, который вводит атрибут стиля на HTML-тег с помощью HtmlUnit-2.13, мы не можем сериализации результирующую HTMLPage и мы получаем следующее сообщение об ошибке:HtmlUnit: 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)
Если стиль атрибут находится на странице и не вводится, страница может быть сериализована без каких-либо проблем.
Обновлено 12/04/2013:
Я нашел, что проблема будет находится в этой области:
private Map<String, StyleElement> styleMap_;
, который является членом класса CSSStyleDeclaration. Класс StyleElement не реализует интерфейс Serializable.
Первоначально поле равно null и никаких проблем не возникает. Однако, как только событие JavaScript выполняется, Map больше не указывает на null и генерируется исключение.
Я что-то не так? Это поле должно быть всегда null или никто не пытался сериализовать этот класс раньше?
Как именно вы сериализуете страницу? –
Я использую следующий фрагмент: 'ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = null; try { out = new ObjectOutputStream (bos); out.writeObject (страница); } catch (Exception ex) { ex.printStackTrace (System.out); } finally { out.close(); bos.close(); } return bos.toByteArray(); ' – Stathis