Файл привязки XJC: переопределить пакет на основе пространства имен вместо 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>

Можно определить bindings контекст без относительного пути в schemaLocation?

Я боюсь XML-каталогов, мы находимся в мире WEB 2.0 (или может быть 4.0?).

Я видел SCD ("обозначение компонента схемы"). Это выглядит многообещающе, но я не могу найти ссылку на этот синтаксис...

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:

Другие вопросы по тегам