【发布时间】: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>
但是,我找不到任何解决方案。
我能得到的更接近的是将每个条目包含在一个冗余的 <entry id="xyz"> ... </entry> 中,如下所示:
<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”并删除多余的<entry>。
如果我设置 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 文件中的 <my_entry> 重命名为 <entry>(默认名称),但没有任何效果。
有人能告诉我在@ElementMap 中使用哪些权限参数来使本文开头介绍的 XML 正常工作吗?
【问题讨论】:
标签: java map hashmap simple-framework