我正在尝试使用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]
]
然后,我尝试设置&#34; inline = true&#34;并删除多余的<entry>
。
如果我设置 inline =&#34; true&#34; , entry =&#34; my_entry&#34; ,并使用我在顶部介绍的第一个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
我还尝试使用值=&#34; my_entry&#34; ,甚至将XML文件中的<my_entry>
重命名为<entry>
(默认值为1),什么都行不通。
有人可以告诉我在@ElementMap中使用的权限参数,以便在本帖子的最顶层引入XML吗?
答案 0 :(得分:3)
我也遇到过这个问题。
不幸的是,当前版本的Simple Framework(2.7)似乎不可能实现所需的紧凑序列化。
请注意,有一个几年前仍然未合并的补丁,可以将原始值序列化为条目属性: https://sourceforge.net/tracker/index.php?func=detail&aid=3032849&group_id=112203&atid=661528