Jibx:将基类输出集成到扩展类输出中

时间:2009-05-17 10:16:32

标签: java xml jibx

我有这个班级模型:

abstract class A {
    int a;
}

class B extends A {
    int b;
}

class C extends B {
    int c;
}

我想让jibx输出这个XML:

<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而不得不重新设计我的类,这让我感到很恼火。

任何人都知道如何解决这个问题?

编辑: 作为一个额外的问题 - 你如何使用Jibx代码/解码java.util.Map?我知道它本身不能完成(很高兴被反驳!)但你会怎么做代码Map(没有字符串)。请注意我们没有使用jibx-extras.jar,所以解决方案不应该依赖它。

1 个答案:

答案 0 :(得分:0)

实际上恕我直言,将C作为B的父级(在XML意义上)感觉很正常,因为 C包含B的信息(来自它继承)及其自身的信息抛开,但B不知道那些特定于C的信息吗?

更清楚:B是 Bird ,C是。鸡是一只鸟,所以C继承了B型,OK。但是在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>

所以从模型的角度来看,对我而言似乎合乎逻辑...... 我没有找到在binding tutorial中实现相反的方法,抱歉。