我可以将当​​前的JAXB模型转换为其他JAXB模型吗?

arc*_*hik 1 java xml xsd jaxb xjc

我有两个XML文件file1.xmlfile2.xml.我也有每个文件的模式,file1.xsdfile2.xsd尊重.

xjc用来创建基于file1.xsd(称为model(1))的java类,并基于file2.xsd(称为model(2))创建类.

我使用model(1)来解析文件JAXB库中的file1.xml .我想将此数据从模型(1)转换为模型(2),然后将转换后的数据封送到file2.xml

是否可以将数据从模型(1)转换为模型(2)?我可以合并ObjectFactories吗?我该怎么做?

bdo*_*han 5

鉴于您的用例,没有办法自动从一个XML模式生成的JAXB(JSR-222)模型转换为另一个XML模式生成的另一个JAXB模型.有几个选择:

选项#1 - 对象到对象的转换

您可以以编程方式在对象模型之间移动数据.还有一些映射库可以使这个过程更容易(http://dozer.sourceforge.net/).

选项#2 - XSLT

XSLT是基于一组规则将一个XML文档转换为另一个XML文档的标准.随着使用JAXBSourceJAXBResult您甚至可以使用XSLT Java的机型.

TransformerFactory tf = TransformerFactory.newInstance();
StreamSource xslt = new StreamSource(new FileInputStream("my-xslt.xml"));
Transformer t = tf.newTransformer(xslt);

JAXBContext jc = JAXBContext.newInstance(MyClass.class);
JAXBSource source = new JAXBSource(jaxbContext1, foo);
JAXBResult result = new JAXBResult(jaxbContext2);
t.transform(source, result);
Bar bar = (Bar) result.getResult();
Run Code Online (Sandbox Code Playgroud)

选项#3 - EclipseLink JAXB(MOXy)的外部映射文件

我是MOXy的主管,我们提供了一个外部映射文件,允许您将对象模型映射到多个XML表示.请参阅以下链接以获取示例: