2014-12-23 4 views
0

Я использую kryo lib для сериализации объектов. Я получаю сообщение об ошибке:Странная ошибка с измененным именем класса в Java

Unable to find class: java.util.ArrayLisoSerialization 

и товарищи по команде воспроизвести эту ошибку ... Кажется, что имя Java-класс от Kryo было изменено (ArrayListSerialization -> ArrayLisoSerialization). Это было протестировано на 2 компьютерах (linux и windows, как jdk7), так и проблема появилась только на моем компьютере (linux). Я попытался изменить версию Java из jdk7 (сборка 67) на jdk8, но проблема все же появляется.

Любые идеи, почему это происходит?

Bigger часть следа ошибки:

com.esotericsoftware.kryo.KryoException: Unable to find class: java.util.ArrayLisoSerialization trace:messages at com.esotericsoftware.kryo.util.DefaultClassResolver.readName(DefaultClassResolver.java:138) at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:115) at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:666) at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:99) at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:528) at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:682)... 

ответ

0

Это выглядит как опечатка где-то в Kryo или в файле конфигурации в вашем проекте. Сначала я бы выполнил строчный поиск в файле проекта.

На второй взгляд, это происходит не так:

String className = input.readString(); 
.... 
type = Class.forName(className, false, kryo.getClassLoader()); 

Проблема заключается в ваших данных, которые он видит. Ваш сериализованный контент содержит, как className, неправильный класс, который вы упомянули.

Я не знаю, как это могло быть вызвано таким образом написать, поскольку я бы предположил, что java.util.ArrayListSerialization изначально была написана, но каким-то образом была повреждена.

Я не слишком хорошо знаком с Крио. Является ли это написанным для человека текстовым файлом? если это возможно, это была случайная замена при чтении файла вручную. (с vi, блокнот или что-то еще). Из того, что я вижу, входной поток просто читается, и строка открывается.

Я бы открыл файл данных и посмотрел, есть ли там строка java.util.ArrayLisoSerialization. Я предполагаю, что это должно быть изменено на java.util.ArrayListSerialization.

HOWEVER Сделайте резервную копию любых данных, которые вы изменяете. Изменение сериализованных данных всегда должно выполняться с сохранностью возможности вернуться к исходным данным.

+1

Я попытался найти опечатку в своем проекте, но ошибок нет. Kryo - проект с открытым исходным кодом, поэтому я проверю их проект на любые ошибки опечатки –

+1

@ ElSzarry обновил мой ответ. Я прошел через весь стек, и LisoSerialization явно выходит из входного потока. поэтому либо файл на диске, либо blob в базе данных содержит неправильное значение. – Joeblade

+0

Я не могу найти никаких ошибок. После того, как я установил Windows в поле «Виртуальный», ошибка не появляется. Я не знаю, в чем проблема, но я думаю, что это можно поместить в среду моего linux. Спасибо за вашу помощь Joeblade :) –