Wie klon ich ein JAXB-Objekt

8

Ich habe einige Jaxb-Objekte (die aus Code erzeugt wurden, der von xsd von jaxb generiert wurde), die ich klonen muss. Die Jaxb-Klasse scheint keine Schnittstelle zu bieten, um dies leicht durchzuführen. Ich kann die Klasse nicht manuell editieren und kann sie nicht erweitern - also muss ich dafür eine Hilfs- / Hilfsmethode erstellen. Was ist der beste Ansatz?

    
Shane C. Mason 30.05.2009, 23:12
quelle

6 Antworten

8

Angesichts des Zwecks von JAXB denke ich, dass der einfachste Weg darin besteht, Ihr Objekt auf XML zu marshallieren und es zurückzumelden.

Es gibt viel mehr Diskussionen zu Google .

JAXB FAQ schlägt vor Beanlib .

Es gibt auch eine Diskussion (sowie einen Link zum Download) eines Cloneable-Plugins unter jaxb2 -commons, obwohl ich keinen Verweis auf der Projektseite finden kann.

    
ykaganovich 30.05.2009, 23:35
quelle
3

Sie sollten cc-xjc ausprobieren, das auf sourceforge verfügbar ist. Eine seiner Eigenschaften ist, clone () und copy-constructors zu erzeugen.

    
Boris 03.02.2011 19:37
quelle
3

Sie können das kopierfähige Plugin verwenden. Es erzeugt tiefe Kopier- / Klon-Methoden (die sogar mit Strategien angepasst werden können).

    
lexicore 11.09.2011 18:26
quelle
2

Ich habe Benchmarks für verschiedene Lösungen zum Klonen eines JAXB-Objekts ausgeführt. Hier sind einige Ergebnisse:

  1. Das mofokom xjc-clone-Plugin scheint am schnellsten zu sein Lösung. Es lässt einfach all Ihre generierten Artefakte Cloneable implementieren und überschreibt sie öffentlich Object.clone() . Leider hat dies Maver Central (noch) nicht erreicht.

  2. Erzeugung von Serializable Artefakten und deren Serialisierung / Deserialisierung ein Dummy-Stream ist 10x langsamer als die Java-Klonierungsmechanismen:

    %Vor%
  3. Das Marshalling / Unmarshalling der JAXB-Objekte ist wiederum 5x langsamer als das Serialisieren / Deserialisieren. Dies schlägt ykaganovichs Lösung vor:

    %Vor%
Lukas Eder 03.06.2012 13:37
quelle
1

Dies ist ein alter Thread, aber ich musste auch klonbare JAXB-Domänenobjekte erstellen, und ich denke, Marshalling - das Unmarshalling ist sicher nicht die beste Lösung.

Idealerweise sollten Sie die Objekte im Speicher kopieren, indem Sie generierte Klonmethoden verwenden. Es gibt ein Maven-Plugin ( maven-jaxb2-plugin ), das Sie für diesen Zweck verwenden können.

Dies sind die relevanten Abschnitte in meiner Maven pom.xml-Datei:

%Vor%

...

%Vor%

Beachten Sie das Argument -Xcopyable , das die Klonmethode innerhalb aller Objekte generiert.

Wenn Sie

verwenden %Vor%

Zum Erstellen des Projekts werden die Domänenklassen mit einer Clone-Implementierung generiert.

Dies ist ein Auszug der klonbezogenen Methoden in einer der Domänenklassen:

%Vor%

Sie können die Quellen und Beispiele des jaxb2 basics Projekts auf dieser Seite finden:

Ссылка

Die Releases mit nützlichen Beispielen können hier heruntergeladen werden:

Ссылка

    
gil.fernandes 26.04.2017 18:49
quelle
1

Wir haben das jaxb2-basics-Plugin verwendet - es ist in Maven Repo verfügbar, fügt nur eine einzige Abhängigkeit hinzu und kann auch verwendet werden, um andere nützliche Dinge zu erzeugen: equals, hashCode, toString, Standardwerte usw. Bitte beachten Sie diesen Link für Details: Ссылка

    
Martin Vysny 09.04.2013 12:19
quelle

Tags und Links