J'essaye de désérialiser une chaîne en Java en utilisant le paquet XStream. Le paquet XStream peut sérialiser ma classe. Je reçois le XML (ne peut pas changer le format de XML) d'un serveur et essaye de sauvegarder ses informations de noeud aux variables correspondantes dans une certaine classe. Ma fonction est en bas et j'ai essayé d'enregistrer un nouveau convertisseur pour l'objet XStream (en pensant que c'était parce qu'une variable est un tableau d'octets) mais toujours pas de chance. Quelqu'un peut-il faire la lumière sur ces exceptions? Ai-je besoin d'enregistrer "MyClass" et d'écrire mon propre convertisseur pour XStream pour gérer la désérialisation de ma classe? Merci d'avance.XStream fromXML() exception
Exception si une chaîne ou d'un objet StringReader sont passés dans fromXML() en entrée:
[erreur irrécupérable]: 1: 1: Contenu est interdit dans prolog.
com.thoughtworks.xstream.io.StreamException:: Le contenu n'est pas autorisé dans le prologue.
à com.thoughtworks.xstream.io.xml.DomDriver.createReader (DomDriver.java:86)
à com.thoughtworks.xstream.io.xml.DomDriver.createReader (DomDriver.java:66)
au com .thoughtworks.xstream.XStream.fromXML (XStream.java:853)
Exception si ByteArrayInputStream est utilisé comme entrée pour fromXML():
com.thoughtworks.xstream.converters.ConversionException: ByteSize : ByteSize: ByteSize: ByteSize
---- Debuggi ng informations ----
message: ByteSize: ByteSize
cause exception: com.thoughtworks.xstream.mapper.CannotResolveClassException
cause message: ByteSize: ByteSize
Classe: MyClass
-type requis: MyClass
chemin :/MyClass/ByteSize
à com.thoughtworks.xstream.core.TreeUnmarshaller.convert (TreeUnmarshaller.java:89)
à com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert (AbstractReferenceUnmarshaller.java:63)
à com.though tworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:76)
à com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother (TreeUnmarshaller.java:60)
à com.thoughtworks.xstream.core.TreeUnmarshaller. démarrer (TreeUnmarshaller.java:137)
à 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);
}
Vous avez raison. quand j'imprime l'entrée de chaîne passée, il y a trois caractères indésirables avant le xml. –
Ok, vous devez simplement vous assurer que le contenu est supprimé avant d'essayer de le désérialiser. Je vous suggère de le faire vous-même avant d'invoquer XStream, ou si ces données proviennent de quelqu'un d'autre, dites-leur de le réparer. –
J'ai enlevé les caractères indésirables sur mon extrémité en s'assurant que la chaîne "commence" avec l'en-tête xml correct. mais maintenant j'obtiens l'exception de ConversionException même avec la chaîne en tant qu'entrée (où comme la chaîne précédemment donnait ce "contenu non autorisé en prologue") –