Я пытаюсь десериализовать строку в 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)
на com.thoughtworks.xstream.core.AbstractT reeMarshallingStrategy.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);
}