Файл привязки 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:
- вверх по течению (с удаленной историей): https://github.com/eclipse-ee4j/jaxb-ri/tree/master/jaxb-ri/xsom/src/main/java/com/sun/xml/xsom/impl/scd
- старые источники: https://github.com/javaee/jaxb-v2/tree/master/jaxb-ri/xsom/src/main/java/com/sun/xml/xsom/impl/scd