简单的XML @ElementMap无法满足键属性

时间:2015-01-30 09:43:21

标签: java xml simple-framework

我尝试使用@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属性的。那里有没有可以提供帮助的简单向导?

提前致谢!

1 个答案:

答案 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<>();
  }