我有这个班级模型:
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,所以解决方案不应该依赖它。
答案 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中实现相反的方法,抱歉。