Ja, ja, ich weiß, dass zu diesem Thema viele Fragen gestellt wurden. Aber ich kann immer noch keine Lösung für mein Problem finden. Ich habe ein mit Eigenschaften versehenes Java-Objekt. Zum Beispiel Kunde, wie in diesem Beispiel . Und ich möchte eine String-Darstellung davon. Google empfiehlt, JAXB für solche Zwecke zu verwenden. In allen Beispielen wird die erstellte XML-Datei jedoch wie folgt in eine Datei oder Konsole gedruckt:
File file = new File("C:\\file.xml");
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, file);
jaxbMarshaller.marshal(customer, System.out);
Aber ich muss dieses Objekt verwenden und über das Netzwerk im XML-Format senden. Ich möchte also einen String erhalten, der XML darstellt.
String xmlString = ...
sendOverNetwork(xmlString);
Wie kann ich das machen?
StringWriter
ist sehr alt. Unter der Decke wird verwendet,StringBuffer
wo ein viel schnellerer Ansatz gewesen wäre,StringBuilder
aber das gab es nicht, als StringWriter zum ersten Mal erstellt wurde. Aus diesem Grundsw.toString()
impliziert jeder Aufruf von eine Synchronisation. Schlecht, wenn Sie Leistung suchen.Eine bequeme Option ist die Verwendung von javax.xml.bind.JAXB :
Der umgekehrte Prozess (Unmarschall) wäre:
Bei diesem Ansatz müssen keine geprüften Ausnahmen behandelt werden.
quelle
Wie in A4L erwähnt, können Sie StringWriter verwenden. Hier Beispielcode bereitstellen:
quelle
Sie können es zu einem zusammenstellen
StringWriter
und seine Schnur greifen. vontoString()
.quelle
StringWriter
. Der Link ist nur eine Dokumentation.StringWriter
, übergeben Sie ihn anmarshal()
, rufen Sie antoString()
.Marshaller
sind mehrere Methoden von Marschällen überladen. Schauen Sie sich einfach deren Parameter und deren Zweck an, und Sie werden die Antwort finden.Testen und Arbeiten von Java-Code zum Konvertieren von Java-Objekten in XML:
Customer.java
createXML.java
quelle
So konvertieren Sie ein Objekt in Java in XML
Customer.java
ConvertObjToXML.java
Versuchen Sie es mit diesem Beispiel ..
quelle
Verwenden von ByteArrayOutputStream
quelle
Ich nahm die JAXB.marshal-Implementierung und fügte jaxb.fragment = true hinzu, um das XML-Prolog zu entfernen. Diese Methode kann Objekte auch ohne die Annotation XmlRootElement verarbeiten. Dies löst auch die ungeprüfte DataBindingException aus.
Wenn Sie die Compiler-Warnung stört, finden Sie hier die Version mit zwei Parametern.
quelle
Generischer Code zum Erstellen von XML Stirng
Objekt -> ist eine Java-Klasse, um es in einen XML- Namen zu konvertieren
-> ist nur ein Namensraum wie etwas - zur Unterscheidung
quelle
Hier ist eine Util-Klasse zum Marshalling und Unmarshaling von Objekten. In meinem Fall war es eine verschachtelte Klasse, also habe ich sie zu statischen JAXBUtils gemacht.
quelle
quelle
Verwenden Sie diese Funktion, um Object in eine XML-Zeichenfolge zu konvertieren (sollte als convertToXml (sourceObject, Object.class) aufgerufen werden;) ->
Verwenden Sie diese Funktion, um eine XML-Zeichenfolge in Objekt zurück zu konvertieren -> (sollte aufgerufen werden als
createObjectFromXmlString(xmlString, Object.class)
)quelle