Я пытаюсь десериализовать строку в Java с помощью пакета XStream. Пакет XStream может сериализовать мой класс нормально. Я получаю XML (не могу изменить формат XML) с сервера и пытаюсь сохранить информацию об его узле в соответствующие переменные в определенном классе. Моя функция находится внизу, и я попытался зарегистрировать новый конвертер для объекта XStream (думая, что это потому, что одна переменная является байтовым массивом), но все же не повезло. Может ли кто-нибудь пролить свет на эти исключения? Нужно ли мне регистрировать «MyClass» и писать собственный конвертер для XStream для десериализации моего класса? Заранее спасибо.
Исключение, если строка или объект StringReader передаются в fromXML () в качестве ввода:
[Фатальная ошибка]: 1: 1: содержимое не разрешено в прологе.
com.thoughtworks.xstream.io.StreamException :: Содержимое запрещено в прологе.
на com.thoughtworks.xstream.io.xml.DomDriver.createReader (DomDriver.java:86)
на com.thoughtworks.xstream.io.xml.DomDriver.createReader (DomDriver.java:66)
на com.thoughtworks.xstream.XStream.fromXML (XStream.java:853)
Исключение, если ByteArrayInputStream используется в качестве входных данных для fromXML ():
com.thoughtworks.xstream.converters.ConversionException: ByteSize: ByteSize: ByteSize: ByteSize
---- Отладочная информация ----
сообщение: ByteSize: ByteSize
причина-исключение: com.thoughtworks.xstream.mapper.CannotResolveClassException
причина-сообщение: ByteSize: ByteSize
класс: MyClass
требуемый тип: MyClass
путь: / MyClass / ByteSize
в com.thoughtworks.xstream.core.TreeUnmarshaller.convert (TreeUnmarshaller.java:89)
в com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert (AbstractReferenceUnmarshaller.java:63)
в com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:76)
в com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:60)
на com.thoughtworks.xstream.core.TreeUnmarshaller.start (TreeUnmarshaller.java:137)
at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal (AbstractTreeMarshallingStrategy.java:33)
на com.thoughtworks.xstream.XStream.unmarshal (XStream.java:923)
на com.thoughtworks.xstream.XStream.unmarshal (XStream.java:909)
на com.thoughtworks.xstream.XStream.fromXML (XStream.java:861)
static Object fromXmlString(String xml)
{
XStream xStream = new XStream(new DomDriver());
xStream.registerConverter(new EncodedByteArrayConverter());
//tried all 3 below
//return xStream.fromXML(new StringReader(xml));
//return xStream.fromXML(new ByteArrayInputStream(xml.getBytes()));
return xStream.fromXML(xml);
}