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

Java 我可以将当前JAXB模型转换为其他JAXB模型吗?,java,xml,xsd,jaxb,xjc,Java,Xml,Xsd,Jaxb,Xjc,我有两个XML文件file1.XML和file2.XML。对于这些文件中的每一个,我都有各自的模式:file1.xsd和file2.xsd 我使用xjc基于file1.xsd创建java类,称为model1,并基于file2.xsd创建类,称为model2 我使用model1将file1.xml与JAXB库解组。我想将此数据从model1转换为model2,然后将转换后的数据封送到file2.xml 是否可以将数据从模型1转换为模型2?我可以合并对象工厂吗?我该怎么做?我不确定我是否理解这个问题

我有两个XML文件file1.XML和file2.XML。对于这些文件中的每一个,我都有各自的模式:file1.xsd和file2.xsd

我使用xjc基于file1.xsd创建java类,称为model1,并基于file2.xsd创建类,称为model2

我使用model1将file1.xml与JAXB库解组。我想将此数据从model1转换为model2,然后将转换后的数据封送到file2.xml


是否可以将数据从模型1转换为模型2?我可以合并对象工厂吗?我该怎么做?

我不确定我是否理解这个问题-我认为您需要在Model2类上添加一个构造函数,该构造函数接受Model1类作为参数

例如,假设这是您的Model1类:

class Model1{
    String firstname;
    String surname;

}

class Model2{
    String fullName
    public Model2(Model1 m){
        this.fullname=m.firstname+" "+m.surname;
    }
}
在该构造函数中,将属性值从m复制到Model2实例

之后,您可以在Model1和Model2之间进行转换:

Model1 m1=unmarshall("file1.xml");
Model2 m2=new Model2(m1);
m2.marshall("file2.xml");

如果您只是在xml格式之间进行转换,我建议您改用。

我不确定是否理解这个问题-我想您需要的是在Model2类上添加一个构造函数,该构造函数接受Model1类作为参数

例如,假设这是您的Model1类:

class Model1{
    String firstname;
    String surname;

}

class Model2{
    String fullName
    public Model2(Model1 m){
        this.fullname=m.firstname+" "+m.surname;
    }
}
在该构造函数中,将属性值从m复制到Model2实例

之后,您可以在Model1和Model2之间进行转换:

Model1 m1=unmarshall("file1.xml");
Model2 m2=new Model2(m1);
m2.marshall("file2.xml");

如果您只是在xml格式之间进行转换,我建议您改用。

鉴于您的用例,没有一种方法可以自动将从一个xml模式生成的模型转换为从另一个xml模式生成的另一个JAXB模型。有几种选择:

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

您可以通过编程在对象模型之间移动数据。还有一些映射库可以使这个过程更容易

选项2-XSLT

XSLT是基于一组规则将一个XML文档转换为另一个XML文档的标准。通过使用JAXBSource和JAXBResult,您甚至可以在Java模型上使用XSLT

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();
选项3-EclipseLink JAXB MOXy的外部映射文件

我是MOXy的负责人,我们提供了一个外部映射文件,允许您将对象模型映射到多个XML表示。有关示例,请参见下面的链接:


给定您的用例,没有一种方法可以自动将从一个XML模式生成的模型转换为从另一个XML模式生成的另一个JAXB模型。有几种选择:

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

您可以通过编程在对象模型之间移动数据。还有一些映射库可以使这个过程更容易

选项2-XSLT

XSLT是基于一组规则将一个XML文档转换为另一个XML文档的标准。通过使用JAXBSource和JAXBResult,您甚至可以在Java模型上使用XSLT

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();
选项3-EclipseLink JAXB MOXy的外部映射文件

我是MOXy的负责人,我们提供了一个外部映射文件,允许您将对象模型映射到多个XML表示。有关示例,请参见下面的链接: