如何在jsonix中包含生成包外的类型?

时间:2017-01-11 14:00:18

标签: java xml maven-jaxb2-plugin jsonix

我从jaxb2生成中排除了一些xml类型,因为Java中已经存在相应的类。一代人完美地工作,并且成立了课程。

当我尝试按this tutorial包含类型时,jsonix仅在包中生成jaxb2类来搜索类。所以它看起来是 generated.entity.Position 而不是 entity.Position 类。

...

    <jaxb:bindings node="//xs:complexType[@name='PositionType']">
            <jaxb:class ref="entity.Position"/>
    </jaxb:bindings>
    <jaxb:bindings node="//xs:complexType[@name='MoveType']">
            <jaxb:class ref="entity.Move"/>
    </jaxb:bindings>

    <jsonix:mapping package="entity">
        <jsonix:includes>
            <jsonix:type name="Position"/>
        </jsonix:includes>
    </jsonix:mapping>
...

1 个答案:

答案 0 :(得分:0)

此处Jsonix的作者。

包含/排除配置不是您可能认为的那样。它只是过滤要包含在映射中的类型或元素。这允许您只使用所需的东西创建更小的映射。

但是,每个命名空间/包都会生成映射。您不能将来自不同包的类型放到一个映射中。但是,您可以创建一个包含多个包的模块。配置如下:

    <jsonix:module name="CSW_2_0_2">
        <jsonix:mapping package="net.opengis.csw.v_2_0_2" name="CSW_2_0_2"/>
        <jsonix:mapping package="org.hisrc.dc.elements.v_1_1" name="DC_1_1"/>
        <jsonix:mapping package="org.hisrc.dc.terms" name="DCT"/>
    </jsonix:module>

接下来,您正在使用jaxb:class/@ref。这对Jsonix来说并不好,因为你说“我不关心XML Schema模型,只需使用这个Java类”。因此,模式编译器(我的意思是底层JAXB模式编译器XJC)不会生成适当的模型。简而言之,Jsonix Schema Compiler不会将您的Java类编译为XML&lt; - &gt; JS映射。它只对XML Schema执行此操作。