我从REST API获得了以下XML
<?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);
我收到以下消息的异常&#34;元素&#39; SecurityGroup&#39;在第1行&#34;类cms_proxy.CMS.nsx.objects.SecurityGroupList中没有匹配项; (忽略行号,它在字符串I&#39; m using中的一行中)。我试图将@ElementList中的名称和条目设置为&#34; securitygroup&#34;但仍然得到同样的信息。
这听起来非常微不足道,我确信我错过了一些非常简单的事情,但我无法让它发挥作用。
感谢。
更新
由于决定从简单到Jaxb的决定,我没有时间检查答案,对不起。再次感谢。
答案 0 :(得分:0)
似乎在公然地告诉你,出了什么问题?我可能会弄错。仍然,XML的第二个条目具有“objectTypeName”而不是“name”作为条目;该列表是隐式严格的,因此如果Persister正在寻找一个“SecurityGroup”类,其中有一个字段,其中反序列化应该填充并随后搜索字段“objectTypeName”,它将找不到所述字段并失败,因为它是类由于您的示例没有规定此类字段,因此未找到尝试填充的内容。
来源:
答案 1 :(得分:0)
这听起来非常微不足道,我确信我错过了一些非常简单的事情,但我无法让它发挥作用。
是的,这是你的错误:
@Root(strict = false)
public class SecurityGroup
{
// ...
}
这将使用SecurityGroup
- 类的名称 - 作为元素名称。因此,该元素被命名为<SecurityGroup>...</SecurityGroup>
。但是您的XML将其包含为小写:<securitygroup>...</securitygroup>
。两者都不匹配,并且简单地抛出异常来表示。
解决方案:您可以使用annotation-argument设置自定义名称:
@Root(name = "securitygroup",strict = false)
public class SecurityGroup
{
// ...
}
现在使用正确的名称,代码应该有效。
答案 2 :(得分:0)
XML区分大小写
@Root
public class SecurityGroupList
{
@ElementList(inline = true, entry="securitygroup")
public List<SecurityGroup> list;
}