2014-09-04 93 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; 
}