Java Can';t使用简单的
我从RESTAPI中获得了以下XMLJava Can';t使用简单的,java,simple-framework,Java,Simple Framework,我从RESTAPI中获得了以下XML <?xml version="1.0" encoding="UTF-8"?> <list> <securitygroup> <objectId>securitygroup-1</objectId> <name>Activity Monitoring Data Collection</name> </securi
<?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>
我得到一个异常消息“元素‘SecurityGroup’在类cms_proxy.cms.nsx.objects.SecurityGroupList的第1行中没有匹配项”(忽略行号,它都在我使用的字符串的一行中)。我试图将@ElementList中的名称和条目设置为“securitygroup”,但仍然收到相同的消息
这听起来很琐碎,我肯定我遗漏了一些非常简单的东西,但我无法让它发挥作用
谢谢
更新
由于一个又一个从simple迁移到Jaxb的决定,我没有时间检查答案,对此表示抱歉。再次感谢 似乎在明目张胆地告诉你怎么了?不过我可能弄错了。但是,XML的第二个条目的条目是“objectTypeName”,而不是“name”;该列表是隐式严格的,因此如果持久化程序正在查找一个“SecurityGroup”类,该类具有一个假定进行反序列化的字段,并随后搜索字段“objectTypeName”它将找不到所述字段,并且由于未找到它尝试填充的类而失败,因为您的示例没有规定此类字段 资料来源: 这听起来很琐碎,我肯定我遗漏了一些非常简单的东西,但我无法让它发挥作用 是的,这是你的错误:
@Root(strict = false)
public class SecurityGroup
{
// ...
}
这将使用SecurityGroup
——类的名称——作为元素名称。因此,该元素被命名为…
。但是您的XML包含它的小写形式:…
。两者都不匹配,simple会抛出一个异常来表明这一点
解决方案:您可以使用注释参数设置自定义名称:
@Root(name = "securitygroup",strict = false)
public class SecurityGroup
{
// ...
}
现在使用了正确的名称,代码应该可以工作。XML区分大小写
@Root
public class SecurityGroupList
{
@ElementList(inline = true, entry="securitygroup")
public List<SecurityGroup> list;
}
@Root
公共类安全组列表
{
@ElementList(inline=true,entry=“securitygroup”)
公开名单;
}
我想说的是,尝试对其进行反向工程。。Serializer Serializer=new Persister();文件结果=新文件(“e:\\example.xml”);serializer.write(组列表、结果);您将看到元素到xml的映射出了什么问题(我已经试过了)。确保在列表中创建两个或三个元素。干杯
@Root(name = "securitygroup",strict = false)
public class SecurityGroup
{
// ...
}
@Root
public class SecurityGroupList
{
@ElementList(inline = true, entry="securitygroup")
public List<SecurityGroup> list;
}