Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用简单的_Java_Simple Framework - Fatal编程技术网

Java Can';t使用简单的

Java 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

我从RESTAPI中获得了以下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>
我得到一个异常消息“元素‘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;
    }