2013-07-15 87 views
2

我不能unmarshall xml,因为不知道如何在另一个对象中注释对象类。请帮忙。对象中的JAXB解组对象

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<ODZ xmlns="http://www.company.com/1.0" > 
    <Data DataID="ZZZ"> 
     <UserData UserKey="user_001"> 
       <UserEvent>...</UserEvent> 
      </UserData> 
    </Data> 
</ODZ> 

容器类: I.第一水平与链接到所述第二(ODZ - >数据)。

@XmlAccessorType(XmlAccessType.NONE) 
@XmlRootElement(name = "ODZ", namespace = "http://www.company.com/1.0") 
public class ODZContainer { 

    private ImportContainer importContainer; 

    @XmlElement (name = "Data", type=ImportContainer.class) 
    public ImportContainer getImportContainer() { 
     return importContainer; 
    } 
} 

二,第二级链接到第三级(数据 - >用户数据)。

@XmlAccessorType(XmlAccessType.NONE) 
@XmlRootElement(name = "Data") 
public class ImportContainer { 

    private String DataID; 
    private ArrayList<UserDataBean> userDataBean; 

    @XmlElement (name = "UserData", type=UserDataBean.class) 
    public ArrayList<UserDataBean> getUserDataBean() { 
     return userDataBean; 
    } 

    @XmlAttribute(name = "DataID") 
    public String getDataID() { 
     return DataID; 
    } 
} 

三,链接到第四级的第三级(UserData-> UserEvent)。

@XmlAccessorType(XmlAccessType.NONE) 
    @XmlRootElement(name = "UserData") 
    public class UserDataBean { 
     private ArrayList<UserEventBean> userEventData; 
     private String userEventID; 

     @XmlAttribute(name = "UserKey") 
     public String getUserEventID() { 
      return userEventID; 
     } 

     @XmlElement (name = "UserEvent", type=UserEventBean.class) 
     public ArrayList<UserEventBean> getUserEventBean() { 
      return userEventData; 
     } 
    } 

回答

1

JAXB元数据中的名称空间限定与您的XML不匹配。您可以使用包级别@XmlSchema注释来指定模型的名称空间限定。

@XmlSchema(
    namespace = "http://www.company.com/1.0", 
    elementFormDefault = XmlNsForm.QUALIFIED) 
package example; 

import javax.xml.bind.annotation.XmlNsForm; 
import javax.xml.bind.annotation.XmlSchema; 

有关JAXB命名空间


事项有关您的元数据更多信息和

由于ArrayList的类型已经指定,所以不需要通过@XmlElement注释来指定它。它没有伤害,但没有必要。

@XmlElement (name = "UserData", type=UserDataBean.class) 
public ArrayList<UserDataBean> getUserDataBean() { 
    return userDataBean; 
} 

@XmlAccessorType(XmlAccessType.NONE)表示没有任何内容被映射,除非它被明确注释。这可能或不是你想要的。您可能会发现下面的文章有用:

+0

谢谢你的评论。请回答一个问题。是这样使用:'@XmlElement(name =“Data”,type = ImportContainer.class)'在父类和'@XMLRootElement(name =“Data”)public class ImportContainer {'..在孩子? – AkiraYamaokaNC

+0

谢谢。经过大量的实验,它正在工作! – AkiraYamaokaNC