FromXML XStream() Ausnahme
Ich versuche deserialisiert einen string in Java mit Hilfe der XStream-Paket. Die XStream-Paket serialisieren können meine Klasse in Ordnung. Ich bekomme die XML nicht ändern format XML) aus einer server-und versuchen zu retten, dessen Knoten die Informationen an die entsprechenden Variablen in einer bestimmten Klasse. Meine Funktion ist am Boden und ich versuchte zu registrieren, einen neuen Konverter für das XStream-Objekt (denken, dass es war, weil eine variable ist eine byte-array), aber noch kein Glück. Kann jemand etwas Licht auf diese Ausnahmen? Muss ich mich registrieren, "MyClass" und Schreibe meine eigenen Konverter für XStream zu handhaben Deserialisieren meiner Klasse? Vielen Dank im Voraus.
Ausnahme, wenn ein string oder StringReader-Objekt übergeben werden fromXML() als input:
[Fatal Error] :1:1: Content is not allowed in prolog.
com.thoughtworks.xstream.io.StreamException: : Content is not allowed in prolog.
bei com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:86)
bei com.thoughtworks.xstream.io.xml.DomDriver.createReader(DomDriver.java:66)
bei com.thoughtworks.xstream.XStream.fromXML(XStream.java:853)
Ausnahme, wenn ByteArrayInputStream dient als Eingabe für die fromXML():
com.thoughtworks.xstream.Wandler.ConversionException: Bytegröße : Bytegröße : Bytegröße : Bytegröße
---- Debuginformationen ----
Nachricht : Bytegröße : Bytegröße
Ursache-Ausnahme : com.thoughtworks.xstream.mapper.CannotResolveClassException
Ursache-Nachricht : Bytegröße : Bytegröße
Klasse : MyClass
erforderlich-Typ : MyClass
Pfad : /MyClass/Bytegröße
bei com.thoughtworks.xstream.core.TreeUnmarshaller.konvertieren(TreeUnmarshaller.java:89)
bei com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:63)
bei com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:76)
bei com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:60)
bei com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:137)
bei com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:33)
bei com.thoughtworks.xstream.XStream.unmarshal(XStream.java:923)
bei com.thoughtworks.xstream.XStream.unmarshal(XStream.java:909)
bei 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);
}
InformationsquelleAutor | 2009-06-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werfen Sie einen Blick auf diese Frage: content not allowed in prolog Ausnahme.
"Content not allowed in prolog" in der Regel bedeutet, dass es einige Inhalte, bevor die
<?xml
header ("prolog") in die Datei. Dies ist nicht erlaubt.Also, stellen Sie sicher, dass es keine Zeichen vor
<?xml
im string, und auch, dass Sie nicht alle BOM Probleme.Ok, so dass Sie einfach brauchen, um sicherzustellen, dass der Inhalt wieder entfernt wird, bevor Sie versuchen zu Deserialisieren. Ich würde dir empfehlen, entweder sich selbst vor der Berufung auf XStream, oder wenn diese Daten kommen von jemand anderes, sagen Sie Ihnen, es zu beheben.
Ich entfernte die junk-Zeichen auf meinem Ende zu machen, dass der string "startsWith" die korrekte xml-header. aber jetzt bekomme ich die ConversionException oben auch mit dem String als Eingabe (wo da der string vorher war die Angabe, dass "content not allowed in prolog")
Ich glaube, das hat zu tun mit XStream nicht zu wissen, welche Klassen zu entsprechen, mit bestimmten XML-Elemente, basierend auf Ihren Namen. Möchten Sie vielleicht einen Blick auf die Registrierung-Aliase: xstream.codehaus.org/alias-tutorial.html
Ich werde mehr in diese option. Vielen Dank für Ihre Hilfe bei den Aufräumarbeiten in den prolog Ausnahme.
InformationsquelleAutor matt b
Dies ist ein encoding-Problem.
Aus dem XStream Dokumentation:
Fügen Sie einfach ein Lesegerät, wenn Sie versuchen, das XML Lesen. Zum Beispiel:
InformationsquelleAutor Assaf Israel
Ist Ihre deserialising/Decodierung XStream Instanz konfiguriert gleichen Mode als Zeichencodierung XStream Instanz ? Ich würde prüfen, ob die letztere, und sicherstellen, die gleiche XStream Instanz kann sowohl encode/decode.
Ich denke, man kann eine Menge Arbeit vor Ihnen (je nach XML müssen Sie deserialise). Ich würde erwarten, dass XStream davon ausgehen, dass es ausgeführt wird das serialisieren sowie. Es kann sein, lohnt sich die Buchung der XML müssen Sie deserialise.
Es ist nichts besonderes über die XML. Es ist nur ein root-Knoten und über 25 Kind-Knoten von unterschiedlichen Datentypen (byte-array, string, int, boolean). Ich einverstanden, man kann davon ausgehen, XStream serialisiert die Daten, die Beispiel-XML ist es nicht Deserialisieren <root> <data1>1</data1> <data2>true</data2> <data3>Beispiel Text</data3> ... </root>
XStream müssen die Karte, die zu einem Java-Objekt (eventuell als root bezeichnet) mit den Daten-Feldern data1/data2 usw.
Kennen Sie eine klare Beispiele zum Aufbau einer neuen Karte für eine XStream-Objekt
InformationsquelleAutor Brian Agnew