1

我有以下 XML:

<appConfig>
    <database isSource="true" fizz="129"/>
    <database isSource="false" fizz="29494" />
    <buzz bee="always" />
</appConfig>

这应该映射到以下 POJO:

public class AppConfig {
    private Database sourceDb;
    private Database targetDb;
    private Buzz buzz;
}

public class Database {
    // Omitted for brevity...
}

public class Buzz {
    // Omitted for brevity...
}

并配置了以下XStream映射器:

XStream oxMapper = new XStream();
oxMapper.alias("appConfig", AppConfig.class);
oxMapper.alias("database", Database.class);
oxMapper.alias("buzz",  Buzz.class);

要像这样读取和反序列化 XML:

ApplicationConfig appCfg = (ApplicationConfig)oxMapper.fromXML(
        getXMLSnippet());

但是我收到了这个错误:

Element database of type com.myapp.Database is not defined as field in type com.myapp.AppConfig

我读了这篇关于隐式集合的文章,并相信XStream 认为我的两个Database项目是列表的一部分(隐式集合),而实际上它们不是(它们应该映射到 2 个不同的AppConfig属性)。

我该如何解决?提前致谢!

4

1 回答 1

0

您必须按字段名称设置别名,而不是类型。对于您的示例,它应该是:

oxMapper.alias("sourceDb", Database.class);
oxMapper.alias("targetDb", Database.class);
oxMapper.alias("buzz",  Buzz.class);
于 2013-08-19T14:08:02.897 回答