Frage

Was ist das Java-Analogon der XML-Serialisierung von .NET?

War es hilfreich?

Lösung

Antwort von 2008Die „offizielle“ Java-API hierfür ist jetzt JAXB – Java API for XML Binding.Sehen Tutorial von Oracle.Die Referenzimplementierung befindet sich unter http://jaxb.java.net/

Aktualisierung 2018 Beachten Sie, dass Die Java EE- und CORBA-Module sind in SE in JDK9 veraltet und müssen in JDK11 aus SE entfernt werden.Um JAXB verwenden zu können, muss es sich daher entweder in Ihrer vorhandenen Umgebung der Enterprise-Klasse befinden, gebündelt durch Ihr z.B.App-Server, oder Sie müssen es manuell einbinden.

Andere Tipps

XStream ist ziemlich gut darin, Objekte ohne viel Konfiguration und Geld in XML zu serialisieren!(es steht unter der BSD-Lizenz).

Wir haben es in einem unserer Projekte verwendet, um die einfache alte Java-Serialisierung zu ersetzen, und es funktionierte fast sofort.

Projekt „Einfache XML-Serialisierung“.

Vielleicht möchten Sie sich das ansehen Einfache XML-Serialisierung Projekt.Es kommt der System.Xml.Serialization in .Net am nächsten, die ich gefunden habe.

JAXB ist Teil der JDK Standard Edition Version 1.6+.So ist es FREE und keine zusätzlichen Bibliotheken zum Herunterladen und Verwalten.Ein einfaches Beispiel kann gefunden werden Hier

XStream scheint tot zu sein.Letzte Aktualisierung erfolgte am 6. Dezember 2008.Simple Scheint so einfach und einfacher zu sein wie JAXB, aber ich konnte keine Lizenzinformationen finden, um es für den Einsatz in Unternehmen zu evaluieren.

Erwähnenswert ist, dass Java seit Version 1.4 über die Klassen java.beans.XMLEncoder und java.beans.XMLDecoder verfügt.Diese Klassen führen eine XML-Codierung durch, die zumindest sehr mit der XML-Serialisierung vergleichbar ist und unter bestimmten Umständen möglicherweise den Zweck erfüllt.

Wenn sich Ihre Klasse für ihre Getter und Setter an die JavaBeans-Spezifikation hält, ist diese Methode einfach zu verwenden und Sie benötigen kein Schema.Mit den folgenden Einschränkungen:

  • Wie bei der normalen Java-Serialisierung
    • Codierung und Decodierung laufen über einen InputStream und OutputStream
    • Der Prozess verwendet die bekannten Methoden writeObject und readObject
  • Im Gegensatz zur normalen Java-Serialisierung
    • Die Kodierung, aber auch die Dekodierung führt dazu, dass Konstruktoren und Initialisierer aufgerufen werden
    • Kodierung und Dekodierung funktionieren unabhängig davon, ob Ihre Klasse Serializable implementiert oder nicht
    • transiente Modifikatoren werden nicht berücksichtigt
    • Funktioniert nur für öffentliche Klassen, die öffentliche Konstruktoren haben

Nehmen Sie zum Beispiel die folgende Erklärung:

public class NPair {
  public NPair() { }
  int number1 = 0;
  int number2 = 0;
  public void setNumber1(int value) { number1 = value;}
  public int getNumber1() { return number1; }
  public void setNumber2(int value) { number2 = value; }
  public int getNumber2() {return number2;}
}

Ausführen dieses Codes:

NPair fe = new NPair();
fe.setNumber1(12);
fe.setNumber2(13);
FileOutputStream fos1 = new FileOutputStream("d:\\ser.xml");
java.beans.XMLEncoder xe1 = new java.beans.XMLEncoder(fos1);
xe1.writeObject(fe);
xe1.close();

Würde zu folgender Datei führen:

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.7.0_02" class="java.beans.XMLDecoder">
 <object class="NPair">
  <void property="number1">
   <int>12</int>
  </void>
  <void property="number2">
   <int>13</int>
  </void>
 </object>
</java>

XMLBeans Funktioniert hervorragend, wenn Sie ein Schema für Ihr XML haben.Es erstellt Java-Objekte für das Schema und erstellt benutzerfreundliche Parse-Methoden.

Wenn Sie über die automatische XML-Serialisierung von Objekten sprechen, schauen Sie sich das an Rolle:

Castor ist ein Open-Source-Datenbindungsframework für Java[tm].Es ist der kürzeste Weg zwischen Java-Objekten, XML-Dokumenten und relationalen Tabellen.Castor bietet Java-zu-XML-Bindung, Java-zu-SQL-Persistenz und mehr.

Normalerweise verwende ich jaxb oder XMLBeans wenn ich Objekte erstellen muss, die in XML serialisierbar sind.Jetzt kann ich das sehen XStream könnte sehr nützlich sein, da es nicht aufdringlich ist und eine wirklich einfache API hat.Ich werde bald damit spielen und es wahrscheinlich nutzen.Der einzige Nachteil, der mir aufgefallen ist, ist, dass ich die Objekt-ID für Querverweise nicht selbst erstellen kann.

@Barak Schiller
Vielen Dank für die Veröffentlichung des Links zu XStream!

Vergiss es nicht JiBX.

wenn du ein willst Strukturierte Lösung (wie ORM) dann ist JAXB2 eine gute Lösung.

Wenn Sie eine Serialisierung wie DOT NET wünschen, können Sie diese verwenden Langzeitpersistenz von JavaBeans-Komponenten

Die Wahl hängt von der Verwendung der Serialisierung ab.

public static String genXmlTag(String tagName, String innerXml, String properties )
{
    return String.format("<%s %s>%s</%s>", tagName, properties, innerXml, tagName);
}

public static String genXmlTag(String tagName, String innerXml )
{
    return genXmlTag(tagName, innerXml, "");
}

public static <T> String serializeXML(List<T> list)
{
    String result = "";
    if (list.size() > 0)
    {
        T tmp = list.get(0);
        String clsName = tmp.getClass().getName();
        String[] splitCls = clsName.split("\\.");
        clsName = splitCls[splitCls.length - 1];
        Field[] fields = tmp.getClass().getFields();

        for (T t : list)
        {
            String row = "";
            try {
                for (Field f : fields)
                {
                    Object value = f.get(t);
                    row += genXmlTag(f.getName(), value == null ? "" : value.toString());
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            row = genXmlTag(clsName, row);

            result += row;
        }
    }

    result = genXmlTag("root", result);
    return result;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top