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

标签 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<>();
}

设备配置.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 属性。有没有简单的向导可以提供帮助?

提前致谢!

最佳答案

您的类结构表明您需要一个如下所示的 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<>();
  }

关于java - 简单的 XML @ElementMap 无法满足关键属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233070/

相关文章:

java - 为什么许多 SWT 控件不允许子类化?

java - BeanPropertySqlParameterSource 和 double

python - Odoo 如何允许多组用户访问按钮?

java - 使用 SimpleXML 反序列化

java - Android 的 XSD 验证

java - 如果从 Tomcat 调用,Firefox headless 永远不会从截图中返回

jquery - 使用 jQuery $.ajax, 'GET' 方法将 XML 显示为 HTML - 仅适用于某些浏览器

android - 是否可以在 Android 中使用 JAXB

java - 简单的 XML 框架和 Android - 奇怪的类属性

java - 如何在 JFileChooser 中的 "Enter"按钮上点击 "Cancel"后采取行动?