JAXB API を使用してコピーを行うことができます。JAXBSource
これには、ソース データをthenのインスタンスにラップすることが含まれます。これはUnmarshaller
、 がSource
単純に非整列化された から非整列JAXBSource
化して、データを 2 番目のモデルにコピーできるためです。
デモコード
デモ
import javax.xml.bind.*;
import javax.xml.bind.util.JAXBSource;
public class Demo {
public static void main(String[] args) throws Exception {
// Create Input from Foo Model
forum17791487.foo.Root fooRoot = new forum17791487.foo.Root();
fooRoot.setValue("Hello World");
JAXBContext fooContext = JAXBContext.newInstance(forum17791487.foo.Root.class);
JAXBSource jaxbSource = new JAXBSource(fooContext, fooRoot);
// Unmarshal Foo Input to Bar Model
JAXBContext barContext = JAXBContext.newInstance(forum17791487.bar.Root.class);
Unmarshaller unmarshaller = barContext.createUnmarshaller();
forum17791487.bar.Root barRoot = (forum17791487.bar.Root) unmarshaller.unmarshal(jaxbSource);
System.out.println(barRoot.getValue());
}
}
出力
Hello World
ジャバモデル
次のクラスは、パッケージ名のみが異なります。この例ではパッケージごとに 1 つのクラスのみが使用されましたが、同じ原則がより大きなモデルにも適用されます。
forum17791487.foo.Root
package forum17791487.foo;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private String value;
public String getValue() {
return value;
}
public void setValue(String foo) {
this.value = foo;
}
}
forum17791487.bar.Root
package forum17791487.bar;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Root {
private String value;
public String getValue() {
return value;
}
public void setValue(String foo) {
this.value = foo;
}
}
詳細については