2008-09-15 7 views

Antwort

8

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

+0

Selbst jetzt, im Jahr 2013 noch XStream perfekt funktioniert. – Andrew

1

Xstream ist sehr einfach http://x-stream.github.io/

XStream eine einfache Bibliothek ist es, Objekte zu XML serialisiert und wieder zurück.

4

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.

http://x-stream.github.io/

-1

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.

1

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.

3

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.

1

JAX-B ist Teil der Standard APIs und wirklich einfach zu bedienen.

1

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.

2

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.

2

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.