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

时间:2019-02-07 01:47:51

标签: jaxb xjb schema-component-designator

我想通过绑定.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>

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

我怕XML Catalogs,我们处于WEB 2.0(或者可能是4.0?)世界中。

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

1 个答案:

答案 0 :(得分:1)

这是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源树中研究其实现: