2013-07-15 89 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