我尝试使用@ElementMap批注使用Simple XML 2.6.2进行反序列化,以构建一个包含元素属性作为键的元素,将元素本身作为值。
XML看起来像这样:
<ProcessConfiguration id="4020">
<EquipmentConfigurations>
<EquipmentConfiguration id="5020">
<address>foo</address>
</EquipmentConfiguration>
</EquipmentConfigurations>
</ProcessConfiguration>
带注释的类看起来像这样:
@Root
class ProcessConfiguration {
@Attribute
Long id;
@ElementMap(name = "EquipmentConfigurations", key="id", attribute = true)
Map<Long, EquipmentConfiguration> equipmentConfigurations = new HashMap<>();
}
EquipmentConfiguration.java
@Root
class EquipmentConfiguration {
@Attribute
Long id;
@Element
String address;
}
如您所见,equipmentConfigurations
地图应包含EquipmentConfiguration
ID作为地图键,EquipmentConfiguration
作为地图值。
但是当我尝试反序列化时,会抛出以下错误:
Exception in thread "main" org.simpleframework.xml.core.ValueRequiredException: Unable to satisfy @org.simpleframework.xml.Attribute(required=true, empty=, name=) on field 'id' java.lang.Long EquipmentConfiguration.id for class EquipmentConfiguration at line 1
我已尝试使用@ElementMap注释进行各种操作,但没有成功。
我非常喜欢这里,因为我不知道Simple是如何找不到id
属性的。那里有没有可以提供帮助的简单向导?
提前致谢!
答案 0 :(得分:1)
您的类结构表明您需要一个xml文件,如下所示。如错误所述,Map条目缺少一个键。它与设备配置的ID不同。
<ProcessConfiguration id="4020">
<EquipmentConfigurations class="java.util.HashMap">
<entry id="56789">
<EquipmentConfiguration id="5020">
<address>foo</address>
</EquipmentConfiguration>
</entry>
</EquipmentConfigurations>
</ProcessConfiguration>
编辑:如果您无法更改XML的结构,可以按以下方式更改ProcessConfiguration
课程:
@Root
static class ProcessConfiguration {
@Attribute
Long id;
@ElementList(name = "EquipmentConfigurations")
List<EquipmentConfiguration> equipmentConfigurations = new ArrayList<>();
}