简单 XML @ElementMap 无法满足 key 属性
Simple XML @ElementMap unable to satisfy key attribute
我正在尝试使用 Simple XML 2.6.2 进行反序列化,使用 @ElementMap 注释构建一个包含元素属性作为键和元素本身作为值的映射。
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
属性的。有没有简单的向导可以提供帮助?
提前致谢!
您的 class 结构声明您需要如下所示的 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
class:
@Root
static class ProcessConfiguration {
@Attribute
Long id;
@ElementList(name = "EquipmentConfigurations")
List<EquipmentConfiguration> equipmentConfigurations = new ArrayList<>();
}
我正在尝试使用 Simple XML 2.6.2 进行反序列化,使用 @ElementMap 注释构建一个包含元素属性作为键和元素本身作为值的映射。
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
属性的。有没有简单的向导可以提供帮助?
提前致谢!
您的 class 结构声明您需要如下所示的 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
class:
@Root
static class ProcessConfiguration {
@Attribute
Long id;
@ElementList(name = "EquipmentConfigurations")
List<EquipmentConfiguration> equipmentConfigurations = new ArrayList<>();
}