Was ist die am einfachsten zu verwendende Technologie, um ein beliebiges Java-Objektdiagramm als XML-Datei zu speichern (und die Objekte später rehydrieren zu können)?Speichern von Java-Objektdiagrammen als XML-Datei
Antwort
Der einfachste Weg hier ist die Serialisierung des Objektgraphen. Java 1.4 unterstützt die Serialisierung als XML.
Eine Lösung, die ich erfolgreich verwendet haben, ist XStream (http://x-stream.github.io/)- es eine kleine Bibliothek ist, die leicht erlauben werden Sie nach und von XML zu serialisiert und deserialisiert
Der Nachteil Sie können die resultierende XML nur sehr begrenzt definieren;. Die möglicherweise nicht in Ihrem Fall notwendig sein
Apache Kocher ist ziemlich einfach: http://commons.apache.org/digester/
JAXB neuerer und kommt mit Anmerkung Güte: https://jaxb.dev.java.net
java.beans.XMLEncoder vielleicht?
Xstream ist sehr einfach http://x-stream.github.io/
XStream eine einfache Bibliothek ist es, Objekte zu XML serialisiert und wieder zurück.
Das Simple API ist, nun ja, einfach Es ist wirklich gut http://simple.sourceforge.net/
Sie auch XStream verwenden können:.!. http://www.ibm.com/developerworks/library/x-xstream/index.html
XStream von den Leuten von Thoughtworks hat eine einfache API und behandelt sogar Dinge wie doppelte und zirkuläre Referenzen. Es scheint aktiv entwickelt zu sein und ist gut dokumentiert.
Wenn Sie Ihre Objekte in einer Datei in die Serialisierung und Deserialisierung sie dann später wirklich nur daran interessiert sind, dann könnten Sie YAML statt XML überprüfen. Mit YAML lässt sich viel einfacher arbeiten als mit XML, und die Ausgabedateien sind sehr gut lesbar (was nicht unbedingt erforderlich ist). Weitere Informationen finden Sie unter yaml.org. Ich habe JYAML erfolgreich auf einem aktuellen Projekt verwendet.
Wenn Sie die Struktur des XML steuern möchten, ist der XStream eine gute Wahl. Sie können Annotationen verwenden, um die Struktur/Abbildung des XML und Ihrer Objekte genau zu definieren.
Verwenden Sie java.beans.XMLEncoder
. Seine API ist sehr einfach (eigentlich ein wenig zu einfach; es wäre schön, sie an einen SAX ContentHandler zu koppeln), aber sie funktioniert bei vielen Graphen sofort und es ist einfach, einen eigenen Persistenz-Delegaten für beliebige ungerade zu erstellen. Ball Klassen, denen Sie begegnen könnten.
- Die Syntax von XMLDecoder ermöglicht Sie Methode, Beispiel oder statisch, einschließlich Konstruktoren aufrufen, es ist so extrem flexibel.
- Andere Encoder Name Elemente und Attribute nach Klasse und Feldnamen, so gibt es kein festes Schema für das Ergebnis. Die XML des XMLEncoders folgt einer einfachen DTD und kann einfach validiert oder transformiert werden, , selbst wenn Sie die verwendeten Typen nie gesehen haben.
- Sie können Objekten einen Bezeichner zuweisen und sie im gesamten Diagramm auf verweisen.
- Sie können sich auf in Klassen oder Schnittstellen definierte Konstanten beziehen.
Und es ist in Java SE integriert, so dass Sie keine zusätzliche Bibliothek versenden müssen.
JAX-B ist Teil der Standard APIs und wirklich einfach zu bedienen.
Ich würde zweite (oder dritte) XStream. Es liest und schreibt XML, ohne dass eine spezielle Bindungskonfiguration erforderlich ist oder viele Fremdsyntax in das XML eingefügt werden müssen.
Wenn Sie die Kontrolle über die XML, die generiert wird, benötigen, empfehlen wir einen Blick auf Betwixt (http://commons.apache.org/betwixt/) - es fügt eine Menge Funktionalität zu Apache Faulbehälter (Digester ist gut zum Erstellen von Objektdiagrammen aus XML, ist es aber nicht gut für die Erzeugung von ihnen).
Wenn es Ihnen wirklich egal ist, welches XML erzeugt wird (nur dass es in Zukunft deserialisiert werden kann), dann sind die XMLEncoder/Decoder-Klassen in Java integriert oder gut - solange die Objekte, die Sie serialisieren, folgen die JavaBean-Spezifikation. Der größte Bereich, in dem ich Probleme mit der XMLEncoder/Decoder-Lösung hatte, ist, wenn Sie eine Bean haben, die eine unveränderliche Liste für eine ihrer Eigenschaften zurückgibt - der Encoder kommt mit dieser Situation nicht gut zurecht.
Obwohl XStream und JAXB einige Objektgraphen erfolgreich serialisieren können, können sie nicht mit sehr komplexen Graphen umgehen. Die leistungsstärkste Lösung für große komplexe Graphen ist http://simple.sourceforge.net/. Außerdem ist es schnell und einfach ohne Abhängigkeiten zu verwenden.
ich put together a list mit vielen XML-Serialisierung Bibliotheken und seiner Lizenz
- 1. Speichern von Benutzereingaben als var
- 2. Speichern von Formulardaten als Sitzungsvariable
- 3. Speichern von JSON als Schlüsselwertpaar
- 4. Speichern von Formulardaten als JSON
- 5. Speichern von Zahlen als varchar
- 6. Speichern von Ints als Gleitkommazahlen
- 7. Bild als PNG speichern
- 8. . NET - Speichern von URLs als globale Variablen
- 9. Speichern von Daten-URI als Bild?
- 10. Speichern von 'globalen' Daten als Standardbenutzer?
- 11. Speichern von Listen als csv in Python
- 12. Activeadmin speichern Wert von Checkbox als boolean
- 13. Speichern von String als kommagetrennte Werte
- 14. Speichern von Daten in Riak als JSON
- 15. C++ - Speichern von Operator als char
- 16. HTML5 Canvas Speichern von Zeichnung als Bild
- 17. Öffnen/Speichern als eigenes Format von Matplotlib?
- 18. speichern CURRENT_TIMESTAMP als GMT
- 19. Als Projekt speichern
- 20. RDD Als Textdatei speichern
- 21. Bildschirm als Bild speichern
- 22. Speichern Array als xml
- 23. Begrenzungsrahmen als Bild speichern
- 24. Ausgabe als Liste speichern
- 25. Open XML als PDF speichern
- 26. Speichern Sie 'Benutzername' als Dateiname
- 27. Speichern Canvas & Legend als Bild
- 28. Speichern eines Datenrahmens als Binärdatei
- 29. Pygame - Oberfläche als Bild speichern
- 30. Absätze als PDF dynamisch speichern?
Selbst jetzt, im Jahr 2013 noch XStream perfekt funktioniert. – Andrew