XStream返回属性值为null

时间:2019-05-30 15:07:17

标签: java xstream

今天,我遇到了XStream的奇怪行为。因此,XML:

<AddressObjectType KOD_T_ST="0" LEVEL="0" SOCRNAME="blabla"/>

Java类:

@XStreamAlias("AddressObjectType")
public class AddressObjectType {

    @XStreamAsAttribute
    @XStreamAlias("KOD_T_ST")
    private Integer id;

    @XStreamAsAttribute
    @XStreamAlias("SOCRNAME")
    private String name;

    @XStreamAsAttribute
    @XStreamAlias("SCNAME")
    private String shortName;

    @XStreamAsAttribute
    @XStreamAlias("LEVEL")
    private int level;
    // . . . getters, setters
}

我仅对属性KOD_T_ST有疑问。反序列化期间始终抛出com.thoughtworks.xstream.converters.ConversionException,原因为NullPointerException。属性值始终为null。甚至我将类型从Integer切换到String。 到底是怎么回事? XStream是否对别名具有任何限制?如何读取价值?

XStream版本1.4.11.1。

非常感谢您的帮助和问候。

1 个答案:

答案 0 :(得分:1)

您现有的xml字符串有问题

<AddressObjectType KOD_T_ST="0" LEVEL="0" SOCRNAME="blabla"/>

代替下面的方法,而使用下面的方法,它将起作用,AddressObjectType对象模型没有变化。标记不同之处,我提供的xml中有两个下划线(__)。

<AddressObjectType KOD__T__ST="0" LEVEL="0" SOCRNAME="blabla"/>

要了解,请参阅下面的链接。 http://x-stream.github.io/faq.html#XML_double_underscores

要引用,

  

为什么字段名称突然在生成的字段中带有双下划线   XML? XStream将Java类名称和字段名称映射到XML标记或   属性。不幸的是,这种映射不能为1:1,因为有些   Java名称中用于标识符的字符在XML名称中无效。   因此,XStream使用XmlFriendlyNameCoder替换这些   字符替换。默认情况下,此NameCoder使用   下划线为转义字符,因此必须转义   也强调自己。您可以提供其他配置   XmlFriendlyNameCoder的实例或完全不同的实例   NoNameCoder之类的实现完全杜绝名称编码。   但是,您有责任确保   名称对XML有效。