2

我是 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 正在 mtaching 或具有匹配的结构,JAXB 将轻松填充这些 POJO。但是在这里我们需要做复杂的映射(例如:PersonAddress类都包含相同的属性名称)。我们如何穿越这些对象并填充这两个对象?

4

1 回答 1

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 -你的.html):

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

了解更多信息

于 2012-09-11T16:11:53.983 回答