2014-09-04 95 views
0

我有以下XML這是我從一個REST API無法反序列化元素的列表簡單

<?xml version="1.0" encoding="UTF-8"?> 
<list> 
    <securitygroup> 
     <objectId>securitygroup-1</objectId> 
     <name>Activity Monitoring Data Collection</name>  
    </securitygroup> 
    <securitygroup> 
     <objectId>securitygroup-10</objectId> 
     <name>object2</name>  
    </securitygroup> 
</list> 

我的課都是這樣

@Root(strict = false) 
public class SecurityGroup 
{ 
    @Element 
    String objectId; 

    @Element 
    String name; 
} 


@Root 
public class SecurityGroupList 
{ 
    @ElementList(inline = true) 
    public List<SecurityGroup> list; 
} 

定義得到當我試圖淡化它

String input = "The above XML..." 
final Persister persister = new Persister(); 
SecurityGroupList list = persister.read(SecurityGroupList.class, input); 

我得到一個異常,下面的消息「元素'SecurityGroup'沒有在類cms_proxy匹配。第1行的CMS.nsx.objects.SecurityGroupList「(忽略行號,它全部在我正在使用的字符串中的一行中)。我試圖將@ElementList中的名稱和條目設置爲「securitygroup」,但仍然收到相同的消息。

這聽起來很瑣碎,我確定我錯過了一些非常簡單的事情,但我無法讓它工作。

謝謝。

UPDATE

由於決定從簡單的移動到JAXB的決定,我沒有時間檢查答案,很抱歉。再次感謝。

+1

我要說嘗試反向工程它..\t \t Serializer serializer = new Persister(); \t \t \t \t文件結果=新文件(「e:\\ example.xml」); \t \t serializer.write(groupList,result); 你會看到你的元素xml映射出了什麼問題(我已經試過了)。確保您在列表中創建兩個或三個元素。 CHEERS !! – ppuskar 2014-09-04 08:36:23

回答

0

似乎是在告訴你,明明白白,什麼是錯的?但我可能會誤解。儘管如此,你的XML的第二個條目有「objectTypeName」而不是「name」作爲條目;這個列表是隱含嚴格的,所以如果Persister正在尋找一個「SecurityGroup」類,該類有一個字段,在該字段中應該填充反序列化,然後搜索字段「objectTypeName」,它不會找到該字段,並且會失敗,因爲它是類因爲你的例子規定沒有這樣的字段,所以沒有找到試圖填充。

來源:

  1. http://simple.sourceforge.net/download/stream/doc/javadoc/org/simpleframework/xml/core/Persister.html
+0

我會試試看,謝謝。 – Vadim 2014-09-04 09:32:29

0

這聽起來很瑣碎,我敢肯定,我失去了一些東西很簡單,但我不能得到它的工作。

是的,一個這裏是你的錯誤:

@Root(strict = false) 
public class SecurityGroup 
{ 
    // ... 
} 

這將使用SecurityGroup - 作爲元素的名稱 - 類的名稱。因此該元素被命名爲<SecurityGroup>...</SecurityGroup>。但是你的XML包含它作爲小寫:<securitygroup>...</securitygroup>。兩者都不匹配,並且簡單地拋出一個異常來表明這一點。

解決方案:您可以設置註解的參數自定義名稱:

@Root(name = "securitygroup",strict = false) 
public class SecurityGroup 
{ 
    // ... 
} 

現在使用正確的名稱和代碼應工作。

0

XML是大小寫敏感的

@Root 
public class SecurityGroupList 
{ 
    @ElementList(inline = true, entry="securitygroup") 
    public List<SecurityGroup> list; 
}