【问题标题】:Right usage of org.simpleframework.xml.ElementMap?org.simpleframework.xml.ElementMap 的正确用法?
【发布时间】:2012-01-30 01:42:05
【问题描述】:

我正在尝试使用 org.simpleframework.xml.ElementMap 将以下 XML 映射到我的 Java 类:

<my_map class="java.util.HashMap">

    <my_entry id="one" other_attribute="abc">
            <my_entry_element>blahblah one</my_entry_element>
    </my_entry>

    <my_entry id="two" other_attribute="def">
        <my_entry_element>blahblah two</my_entry_element>
    </my_entry>

</my_map>

但是,我找不到任何解决方案。 我能得到的更接近的是将每个条目包含在一个冗余的 &lt;entry id="xyz"&gt; ... &lt;/entry&gt; 中,如下所示:

<my_map class="java.util.HashMap">

    <entry id="one">
        <my_entry id="one" other_attribute="abc">
            <my_entry_element>blahblah one</my_entry_element>
        </my_entry>
    </entry>

    <entry id="two">
        <my_entry id="two" other_attribute="def">
            <my_entry_element>blahblah two</my_entry_element>
        </my_entry>
    </entry>

</my_map>

上面的 XML 可以很好地与以下 Java 包装器配合使用:

@Root(name="my_root_class")
public class MyRootClass {

    @ElementMap(name="my_map"
            ,key="id"
            ,keyType=String.class
            ,valueType=MyEntry.class
            ,attribute=true
            ,inline=false
            )
    private Map<String, MyEntry> myEntries = new HashMap<String, MyEntry>();

    // ... (getters/setters/..)

}

元素映射正确:

MyRootClass [
    two: MyEntry [id=two, otherAttribute=def, myEntryElement=blahblah two]
    one: MyEntry [id=one, otherAttribute=abc, myEntryElement=blahblah one]
]

然后,我尝试设置“inline=true”并删除多余的&lt;entry&gt;。 如果我设置 inline="true"entry="my_entry",并使用我在此消息顶部介绍的第一个 XML(真正的那个,那个我希望能够使用),我得到一个错误:

ExceptionUnable to satisfy @org.simpleframework.xml.ElementMap(keyType=class java.lang.String, inline=true, entry=my_entry, name=my_map, data=false, empty=true, value=, attribute=true, valueType=class com.mycomp.thomas.simpleXml.MyEntry, required=true, key=id) on field 'myEntries' private java.util.Map com.mycomp.thomas.simpleXml.MyRootClass.myEntries for class com.mycomp.thomas.simpleXml.MyRootClass at line 1

我还尝试使用 value="my_entry" 甚至将 XML 文件中的 &lt;my_entry&gt; 重命名为 &lt;entry&gt;(默认名称),但没有任何效果。

有人能告诉我在@ElementMap 中使用哪些权限参数来使本文开头介绍的 XML 正常工作吗?

【问题讨论】:

    标签: java map hashmap simple-framework


    【解决方案1】:

    我也遇到过这个问题。

    不幸的是,当前版本的 Simple Framework (2.7) 似乎无法实现所需的紧凑序列化。

    请注意,有一个几年前仍未合并的补丁可以将原始值序列化为条目属性: https://sourceforge.net/tracker/index.php?func=detail&aid=3032849&group_id=112203&atid=661528

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-01
      • 2012-03-08
      • 2011-07-25
      相关资源
      最近更新 更多