Я пытаюсь десериализовать строку на Java с помощью пакета XStream. Пакет XStream может сериализовать мой класс. Я получаю XML (не могу изменить формат XML) с сервера и пытаюсь сохранить его информацию о узле в соответствующие переменные в определенном классе. Моя функция находится внизу, и я попытался зарегистрировать новый конвертер для объекта XStream (считая, что это потому, что одна переменная является массивом байтов), но все равно не повезло. Может ли кто-нибудь пролить свет на эти исключения? Нужно ли регистрировать «MyClass» и написать собственный конвертер для XStream для десериализации моего класса? Заранее спасибо.XStream fromXML() exception
Исключение, если строка или объект 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)
на ком .thoughtworks.xstream.XStream.fromXML (XStream.java:853)
Исключение, если ByteArrayInputStream используется в качестве входных данных для FromXml():
com.thoughtworks.xstream.converters.ConversionException: ByteSize : ByteSize: ByteSize: ByteSize
---- Debuggi Информация нг ----
сообщение: ByteSize: ByteSize
причинно-исключение: com.thoughtworks.xstream.mapper.CannotResolveClassException
причинно-сообщение: ByteSize: ByteSize
класс: MyClass
требуется тип: MyClass
путь:/МойКласс/ByteSize
в com.thoughtworks.xstream.core.TreeUnmarshaller.convert (TreeUnmarshaller.java:89)
в com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert (AbstractReferenceUnmarshaller.java:63)
at com.though tworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:76)
в com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:60)
в com.thoughtworks.xstream.core.TreeUnmarshaller. начать (TreeUnmarshaller.java:137)
на com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal (AbstractTreeMarshallingStrategy.java:33)
в com.thoughtworks.xstream.XStream.unmarshal (XStream.java:923)
at com.thoughtworks.xstream.XStream.unmarshal (XStream.java:909)
at 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);
}
Вы верны. когда я распечатываю входной поток, который передается, есть три нежелательных символа перед xml. – 2009-06-16 14:51:30
Итак, вам просто нужно убедиться, что контент удаляется, прежде чем пытаться десериализовать его. Я предлагаю вам либо сделать это самостоятельно до вызова XStream, либо если эти данные поступают от кого-то другого, скажите им, чтобы они исправили это. –
Я удалил ненужные символы на моем конце, убедившись, что строка «начинает с» правильного заголовка xml. но теперь я получаю исключение ConversionException выше даже с String в качестве входных данных (где в качестве строки ранее указывалось, что «контент не разрешен в прологе») – 2009-06-16 14:59:17