【问题标题】:How to include types outside generated package in jsonix?如何在 jsonix 中包含生成的包之外的类型?
【发布时间】:2023-03-12 02:51:01
【问题描述】:

我已经从 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>
...

【问题讨论】:

    标签: java xml maven-jaxb2-plugin jsonix


    【解决方案1】:

    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 类编译成 XMLJS 映射。它只对 XML Schema 执行此操作。

    【讨论】:

      猜你喜欢
      • 2020-05-22
      • 1970-01-01
      • 2021-10-24
      • 2019-08-28
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多