Ich muss eine XML-Datei für eine Eingabe in einen SOAP-Service in Java erstellen. Das Eingabe-XML kann aus mindestens 1000 Tags bestehen. Was ist der beste Weg, um XML zu erstellen? Ich habe die XSD-Dateien, aber es ist ein wenig kompliziert, JAXB zu verwenden. Ist XMLStreamWriter eine gute Option dafür?Best Practice für große XML-Datei Builder
Antwort
XMLStreamWriter ist eine der besseren APIs zum Schreiben von XML aus einer Java-Anwendung, aber es hat ein paar Macken (z. B. seine Namespace-Handhabung ist ein bisschen seltsam) und Sie können es sinnvoll finden, es in eine Convenience-API zu wickeln das weiß über die Art von Dokument, das Sie schreiben, z Welche Namespaces verwendet es?
Einer der Vorteile der XMLStreamWriter-Schnittstelle besteht darin, dass zahlreiche Implementierungen zur Auswahl stehen. Zum Beispiel hat Saxon eine Implementierung, die Ihnen die volle Kontrolle über alle XSLT/XQuery-Serialisierungsoptionen plus Saxon-Erweiterungen gibt (zum Beispiel können Sie sogar die Reihenfolge der Ausgabe von Attributen steuern!)
Eines der Probleme, die ich mit allen Ereignissen traf -basierte APIs ist, dass Sie früher oder später vergessen, ein End-Tag zu schreiben, und das kann ziemlich schwierig zu debuggen sein. Die Verwendung einer Wrapper-API, die Sie dazu zwingt, den Elementnamen in einen Aufruf von endElement() aufzunehmen, kann beim Debuggen hilfreich sein. Wenn das Debugging eingeschaltet ist, können Sie einen Stapel von Elementnamen beibehalten und prüfen, ob endElement() das richtige Tag schreibt. wenn das Debugging ausgeschaltet ist, fallen Sie einfach auf diesen Check.
Serialisierung mit JAXB ist natürlich auf höherer Ebene, aber der Nachteil ist, dass es Ihnen weniger Kontrolle gibt.
Wenn Sie die XSD-Datei haben, können Sie JAXB-Fragmente und Stream und einen Iterator von Objekten verwenden. Ich werde den Code bei Interesse veröffentlichen. –
Es hängt davon ab, wie viele Informationen sich ändern können. Wenn es nur eine Zeile von Tausenden gibt, die sich ändern, kann eine statische Datei die beste Lösung sein. Im Durchschnitt suggeriere ich Freemarker, nur bei massiven Modifikationen sollte ein komplexes Framework die Lösung sein. –
Wie groß ist die XML-Dateigröße? Wie viel Heapspeicher können Sie für jvm reservieren? –