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 (実際に使用したい 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"<my_entry>
で遊んだり、XML ファイルの名前を(<entry>
デフォルトのもの) に変更したりしてみましたが、何も機能しません。
この投稿の一番上で紹介した XML を機能させるために @ElementMap で使用する権利パラメータを教えてもらえますか?