Это старый поток, но мне также пришлось создавать клонируемые доменные объекты JAXB, и я думаю, что маршаллинг - демаршаллинг не является лучшим решением.
В идеале вы должны копировать объекты в памяти, используя сгенерированные методы клонирования. Существует плагин Maven ( maven-jaxb2-plugin ), который вы можете использовать для этой цели.
Это соответствующий раздел в моем файле Maven pom.xml:
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>0.11.1</version>
</dependency>
...
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<schemaDirectory>${basedir}/src/main/xsd</schemaDirectory>
<bindingDirectory>${basedir}/src/main/xjb</bindingDirectory>
<args>
<arg>-Xcopyable</arg>
</args>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>1.11.1</version>
</plugin>
</plugins>
</configuration>
</plugin>
Обратите внимание на аргумент -Xcopyable , который генерирует метод клона внутри всех объектов.
Если вы используете
mvn clean install
для построения проекта это сгенерирует доменные классы с реализацией клона.
Это выдержка из методов, связанных с клоном в одном из классов домена:
public Object clone() {
return copyTo(createNewInstance());
}
public Object copyTo(Object target) {
final CopyStrategy2 strategy = JAXBCopyStrategy.INSTANCE;
return copyTo(null, target, strategy);
}
Вы можете найти источники и примеры проекта основ jaxb2 на этой странице:
https://github.com/highsource/jaxb2-basics/wiki/Sample-Projects
Релизы с полезными примерами можно скачать здесь:
https://github.com/highsource/jaxb2-basics/releases