复杂的JAXB解组成多个对象

时间:2012-09-11 15:28:07

标签: jaxb jaxb2

我是JAXB的新手,目前正在开发一个项目,该项目需要将复杂的XML解组到多个嵌套对象中。例如,假设我有以下XML

 <person>
     <bio>
          <id>12345</id>
          <name>Keth TTT</name>
          <age>30</age>
     </bio>
     <address>
           <no>1232</no>
           <street>York Street</street>
           <city>NewYork<city>
           <country>USA</country>
     </address>
 </person>

并假设我有以下域对象

class Person{
    String id;
    String name;
    int age;
    Address address;
}

class Address{
    String name;
    String no;
    String street;
    String city;
    String country;
}

如果XSD正在混搭或具有匹配结构,JAXB将很容易填充这些POJO。但是在这里我们需要进行复杂的映射(例如:PersonAddress类都包含相同的属性名称)。我们如何穿过这些物体并填充两个物体?

1 个答案:

答案 0 :(得分:0)

注意:我是EclipseLink JAXB (MOXy)主管,是JAXB (JSR-222)专家组的成员。

您可以将MOXy的@XmlPath扩展名用于您的用例。您的Person课程类似于:

import javax.xml.bind.annotations*;
import org.eclipse.persistence.oxm.annotations.XmlPath;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Person{

    @XmlPath("bio/id/text()")
    String id;

    @XmlPath("bio/name/text()")
    String name;

    @XmlPath("bio/age/text()")
    int age;

    Address address;
}

要将MOXy指定为JAXB提供程序,您需要在与域模型相同的程序包中包含名为jaxb.properties的文件,并带有以下条目(请参阅:http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html):

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

了解更多信息