Файл привязки XJC: переопределить пакет на основе пространства имен вместо schemaLocation - PullRequest
0 голосов
/ 07 февраля 2019

Я хочу переопределить пакет для моей схемы с помощью файла привязки .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 Ответ

0 голосов
/ 07 февраля 2019

Вот магия 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:

...