4

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 で使用する権利パラメータを教えてもらえますか?

4

1 に答える 1

3

私もこの問題に遭遇しました。

残念ながら、希望するコンパクトなシリアル化は、Simple Framework (2.7) の現在のバージョンでは不可能のようです。

エントリ属性としてのプリミティブ値のシリアル化を有効にする、まだマージされていない数年前のパッチがあることに注意してください: https://sourceforge.net/tracker/index.php?func=detail&aid=3032849&group_id=112203&atid=661528

于 2013-03-25T17:51:01.513 に答える