2013-05-14 74 views
2

我想從使用JAXB的對象構建XML。使用jaxb將對象轉換爲XML的異常

但我失去了一些東西,因爲我得到一個異常:

javax.xml.bind.MarshalException - 帶鏈接的異常:[com.sun.istack.internal.SAXException2:類員工,也沒有任何的它的超類在這方面是已知的。 javax.xml.bind.JAXBException:Employee類或其任何超 類是已知的這種情況下]

@XmlRootElement(name = "employee") 
public class Employee { 
    private String name; 
    private String employeeId; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 
    public String getEmployeeId() { 
     return employeeId; 
    } 

    public void setEmployeeId(String employeeId) { 
     this.employeeId = employeeId; 
    } 

} 

@XmlRootElement(name = "Data") 
public class Data { 
    public Data() { 
    } 

    private List employees; 

    @XmlElementWrapper(name = "employeeList") 
    @XmlElement(name = "employee") 
    public List getEmployees() { 
     return employees; 
    } 

    public void setEmployees(List employees) { 
     this.employees = employees; 
    } 

} 


public static void main(String[] args) { 
     ArrayList list = new ArrayList(); 

     Employee e1 = new Employee(); 
     e1.setName("Name"); 
     e1.setEmployeeId("1"); 
     list.add(e1); 
     Data data = new Data(); 
     data.setEmployees(list); 

     JAXBContext context; 

     ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 

     try { 
      context = JAXBContext.newInstance(Data.class); 
      Marshaller m = context.createMarshaller(); 
      m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); 
      m.marshal(data, outStream); 
     } catch (JAXBException e) { 

      e.printStackTrace(); 
     } 

    } 

回答

4

你需要做以下操作之一,使您的JAXB(JSR-222。 )的實現意識到Data類中的employees屬性包含Employee的實例。

@XmlElementWrapper(name = "employeeList") 
@XmlElement(name = "employee", type=Employee.class) 
public List getEmployees() { 
    return employees; 
} 

@XmlElementWrapper(name = "employeeList") 
@XmlElement(name = "employee") 
public List<Employee> getEmployees() { 
    return employees; 
}