JAXB在对象中解组对象

时间:2013-07-15 14:43:58

标签: jaxb annotations unmarshalling

我无法解组xml因为不了解如何在另一个对象中注释对象类。请帮忙。

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 - &gt;数据)。

@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;
    }
}

II。第二级,链接到第三级(数据 - &gt; UserData )。

@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;
    }
}

III。第三级链接到第四级( UserData-&gt; 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 个答案:

答案 0 :(得分: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)表示除非明确注释,否则不会映射任何内容。这可能或不是你想要的。您可能会发现以下文章很有用:

相关问题