0

私はこのクラスモデルを持っています:

abstract class A {
    int a;
}

class B extends A {
    int b;
}

class C extends B {
    int c;
}

そして、この XML を出力するように jibx を取得したいと思います。

<B b=1 a=0>
    <children>
        <C c=2 b=1 a=0/>        
    </children>
</B>

私はこのバインディングxmlを持っています:

<binding>
    <mapping class="A" abstract="true">
        <value name="a" field="a" style="attribute" usage="optional"/>      
        <collection field="children" type="java.util.ArrayList"/>
    </mapping>
    <mapping name="B" class="B" extends="A">
        <value name="b" field="b" style="attribute" usage="optional"/>
        <structure map-as="A"/>
    </mapping>
    <mapping name="C" class="C" extends="B">
        <value name="c" field="c" style="attribute" usage="optional"/>
        <structure map-as="B"/>
    </mapping>
</binding>

ただし、次のようなアーティファクトを取得し続けます。

<C c=2>
    <B b=1 a=0>
        <children>
            ...
        </children>
    </B>
</C>

一時的な解決策として、継承構造を AbstractB に変更し、B が AbstractB を拡張し、C が AbstractB を拡張するようにしましたが、jibx のためにクラスを再設計しなければならないのは本当に面倒です。

誰でもこれを解決する方法を知っていますか?

編集: おまけの質問として - java.util.Map を Jibx でコード/デコードするにはどうすればよいですか? ネイティブに実行できないことはわかっていますが (反証されてうれしいです!)、Map (文字列なし) をコーディングするにはどうすればよいでしょうか。私たちはjibx-extras.jarを使用していないので、ソリューションはこれに依存すべきではないことに注意してください。

4

1 に答える 1

0

実際、私見では、 CにはBの情報(継承元から)とそれ自体の情報が含まれているため、CをBの親(XMLの意味で)として取得するのは普通のことですが、BはそれらのC固有の情報を知りません。情報は正しいですか?

明確にするために、BはBird、CはChickenです。鶏は鳥なので、CはフォームBを継承します。しかし、XML形式では、以下を格納します:

<Bird color="brown">
    <Chicken label="Kentucky-fried" />
</Bird>

また

<Chicken label="Kentucky-fried"> <!-- chicken-specific information -->
    <Bird color="brown" /> <!-- "birdy" part of the chicken -->
</Chicken>

したがって、モデルの観点からは、それは私には論理的であるように思われます...そして、バインディングチュートリアルで、反対のことを達成する方法を見つけられませんでした。申し訳ありません。

于 2009-06-12T22:27:22.133 に答える