【问题标题】:Complex JAXB unmarshalling into more than object复杂的 JAXB 解组为多个对象
【发布时间】:2012-09-11 15:28:07
【问题描述】:

我是 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 类都包含相同的属性名称)。我们如何穿越这些对象并填充这两个对象?

【问题讨论】:

    标签: jaxb jaxb2


    【解决方案1】:

    注意:我是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
    

    更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多