ObjectGridRuntimeException: CWOBJ6339E: The conversion of type […ImmutableMap$SerializedForm] to type […ImmutableMap] failed.

Возникла проблема с десериализацией классов в WebSphere eXtreme Scale и обратно. Я сначала полагал, что WebSphere eXtreme Scale использует стандартную сериализацию Java, но оказалось, что он по умолчанию использует свой eXtreme Data Format, поэтому может сериализовать даже те классы, которые не помечены как сериализуемые. При этом он, правда, использует стандартную сериализацию Java для тех классов, которые помечены как Serializable  или Externalizable.

 

При сериализации и десериализации guava-овских коллекций на Jetty при считывании данных из eXtreme Scale происходит проблема с десериализацией:
Caused by: com.ibm.websphere.objectgrid.ObjectGridRuntimeException: CWOBJ6339E: The conversion of type [com.google.common.collect.ImmutableMap$SerializedForm] to type [com.google.common.collect.ImmutableMap] failed.~wxs5341
коллекции Guava десериализуются в класс SerializedForm, который по идее не должен покидать пределы внутренностей библиотеки Guava.

Я нашёл следующие статьи:
https://github.com/google/guava/issues/1554
http://stackoverflow.com/questions/9110677/readresolve-not-working-an-instance-of-guavas-serializedform-appears
Проблема, похоже, заключается в разных класслоадерах.

У меня на самом деле проблема была в библиотеке ogclient. У нас в зависимостях jetty-maven-plugin была подключена версия 8.6.0.1, я поменял на 8.6.0.8 и всё заработало.
Вот такая стала зависимость:

Сам класс ImmutableMap  использует стандартную сериализацию через readResolve и writeReplace (подробнее про эти методы в статье про сериализацию в Java)Видимо в старой зависимости подключался какая-та не такая версия guava, в которой не работал readResolve.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *