2013-07-10 80 views
2

我想将以下XML文档解组为JAXB java对象。包含其他对象集合的对象的JAXB解组问题

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
    <company> 
    <name>ABC Inc</name> 
    <address>123 1st Street, My City, AB</address> 
    <employees> 
    <employee> 
    <firstName>John</firstName> 
    <lastName>Doe</lastName> 
    </employee> 
    <employee> 
    <firstName>John2</firstName> 
    <lastName>Doe2</lastName> 
    </employee> 
    </employees> 
    </company> 

使用下面的Java代码,但孩子集合(company.getEmployees())不包含任何元素,即使XML包含两个元素。

JAXBContext jc = JAXBContext.newInstance("com.abc"); 
    Unmarshaller unmarshaller = jc.createUnmarshaller(); 
    JAXBElement<Company> root = unmarshaller.unmarshal(new StreamSource(new FileInputStream("TestCompany.xml")), Company.class); 
    Company company = root.getValue(); 
    List<Employee> employees = company.getEmployees(); 

下面是JAXB生成的类:

@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "company", propOrder = { 
     "name", 
     "address", 
     "employees" 
    }) 
    public class Company { 
     @XmlElement(required = true) 
     protected String name; 
     @XmlElement(required = true, nillable = true) 
     protected String address; 
     protected List<Employee> employees; 

     public String getName() { 
      return name; 
     } 
     public void setName(String value) { 
      this.name = value; 
     } 
     public String getAddress() { 
      return address; 
     } 
     public void setAddress(String value) { 
      this.address = value; 
     } 
     public List<Employee> getEmployees() { 
      if (employees == null) { 
       employees = new ArrayList<Employee>(); 
      } 
      return this.employees; 
     } 
    } 

    @XmlAccessorType(XmlAccessType.FIELD) 
    @XmlType(name = "employee", propOrder = { 
     "firstName", 
     "lastName" 
    }) 
    public class Employee { 

     @XmlElement(required = true) 
     protected String firstName; 
     @XmlElement(required = true) 
     protected String lastName; 

     public String getFirstName() { 
      return firstName; 
     } 
     public void setFirstName(String value) { 
      this.firstName = value; 
     } 
     public String getLastName() { 
      return lastName; 
     } 
     public void setLastName(String value) { 
      this.lastName = value; 
     } 
    } 

回答

相关问题