XJC 绑定文件:基于命名空间而不是 schemaLocation 覆盖包

XJC binding file: override package based on namespace instead of schemaLocation

我想通过绑定 .xjb 文件覆盖我的模式的包。

完成于:

<schemaBindings>
    <package name="com.schema.common" />
</schemaBindings>

JXC 编译器需要上述代码的上下文,通过 schemaLocation.

定义

我将 .xsd.xjb 文件存储在不同的目录中,这看起来很难看(就像所有 Java EE 一样):

<bindings schemaLocation="../../../../wsdl/common_v47_0/CommonReqRsp.xsd">
    <schemaBindings>
        <package name="com.schema.common" />
    </schemaBindings>
</bindings>

是否可以在 schemaLocation 中定义没有相对路径的 bindings 上下文?

我看过SCD ("schema component designator")。看起来很有希望,但我找不到此语法的参考...

这是 SCD 的神奇之处:

<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version='2.1'
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns:tns="http://example/schema/common_v47_0">
    <bindings scd="x-schema::tns">
        <schemaBindings>
            <package name="com.schema.common" />
        </schemaBindings>
    </bindings>
</bindings>

所有部分都很重要。 SCD 于 version='2.1'.

中引入

我在 https://github.com/highsource/maven-jaxb2-plugin/wiki/Configure-Target-Packages-in-Binding-Files

找到了参考资料

SCD 是 JAXB 标准的扩展,可以在 JAXB RI 源代码树中研究实现: