代码之家  ›  专栏  ›  技术社区  ›  Ran Biron

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

  •  0
  • Ran Biron  · 技术社区  · 16 年前

    我有这个班级模型:

    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中使用code/decode java.util.map?我知道这是不可能做到的(很高兴被反驳!)但你会怎么做代码映射(没有字符串)。请注意,我们没有使用jibx-extras.jar,所以解决方案不应该依赖它。

    1 回复  |  直到 13 年前
        1
  •  0
  •   instanceof me    15 年前

    实际上,让c作为b的父(在xml意义上)感觉有点正常,因为 c包含b的信息 (它继承自wich) 除了它自己的信息 ,但是B不知道这些C-特定的信息,对吧?

    更清楚地说:B是 C是 . 鸡是鸟,所以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>
    

    ?

    所以从模型的角度来看,我觉得这是合乎逻辑的… 我没有找到一种方法来达到相反的效果 binding tutorial 对不起。