Xml反序列化ValueRequiredException

时间:2014-01-15 07:09:51

标签: java android xml-parsing xml-serialization simple-framework

我正在反序列化一个Xml文件:

<?xml version="1.0" encoding="utf-8"?>
<UserList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UserLists>
    <user>
      <username>Salesman1</username>
      <password>123</password>
      <salesmanId>4</salesmanId>
    </user>
  </UserLists>
</UserList>

用这一行抛出异常:

org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.ElementList(data=false, empty=true, entry=user, inline=true, name=, required=true, type=void) on field 'user' public java.util.List azdad.pos.android.UserList.user for class azdad.pos.android.UserList at line 2

我的实体类是:

import java.util.List;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.ElementList;
import org.simpleframework.xml.Path;
import org.simpleframework.xml.Root;

@Root(name="UserList",strict=false)

public class UserList{


     @ElementList(entry="user", inline=true)
     public List<UserInfo> user;

     public List<UserInfo> getUsrs(){
         return user;
     }
}

我用过

  

严格

忽略标签根据此链接:

How to ignore unused XML elements while deserializing a document?

但它不起作用,是否有人知道如何忽略deserializng的 标记

1 个答案:

答案 0 :(得分:2)

我相信你要忽略的是<UserLists>标签对吗? 您的问题来自使用inline属性(请参阅Simple XML inlining),您需要使用:

@Root(name="UserList")
public class UserList{


    @ElementList(name="UserLists", entry="user")
    public List<UserInfo> user;

    public List<UserInfo> getUsers(){
        return user;
    }
}

那时不应该需要strict属性。

注意:我更正了getUsers()中的语法错误:因为Simple使用反射,这可能很重要。