如何在 jsonix 中包含生成包之外的类型?
How to include types outside generated package in jsonix?
我从 jaxb2 生成中排除了一些 xml 类型,因为相应的 classes 已经存在于 Java 中。一代完美运行,classes 成立。
当我尝试通过 this tutorial 包含类型时,jsonix 仅在具有生成的 jaxb2 classes 的包中搜索 classes。所以它看起来 generated.entity.Position 而不是 entity.Position class.
...
<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>
...
Jsonix 的作者在这里。
Includes/excludes 配置并不像您想象的那样。它只是过滤您想要包含在映射中的类型或元素。这允许您只用您需要的东西创建更小的映射。
仍然,映射是根据 namespace/package 生成的。您不能将不同包中的类型放到一个映射中。但是,您可以创建一个包含多个包的模块。配置如下:
<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 不利,因为你说 "I don't care about XML Schema model, just use this Java class"。所以模式编译器(我指的是底层 JAXB 模式编译器 XJC)不会生成合适的模型。简而言之,Jsonix Schema Compiler 不会将您的 Java 类 编译成 XML<->JS 映射。它只对 XML 模式执行此操作。
我从 jaxb2 生成中排除了一些 xml 类型,因为相应的 classes 已经存在于 Java 中。一代完美运行,classes 成立。
当我尝试通过 this tutorial 包含类型时,jsonix 仅在具有生成的 jaxb2 classes 的包中搜索 classes。所以它看起来 generated.entity.Position 而不是 entity.Position class.
...
<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>
...
Jsonix 的作者在这里。
Includes/excludes 配置并不像您想象的那样。它只是过滤您想要包含在映射中的类型或元素。这允许您只用您需要的东西创建更小的映射。
仍然,映射是根据 namespace/package 生成的。您不能将不同包中的类型放到一个映射中。但是,您可以创建一个包含多个包的模块。配置如下:
<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 不利,因为你说 "I don't care about XML Schema model, just use this Java class"。所以模式编译器(我指的是底层 JAXB 模式编译器 XJC)不会生成合适的模型。简而言之,Jsonix Schema Compiler 不会将您的 Java 类 编译成 XML<->JS 映射。它只对 XML 模式执行此操作。