JAXB: как указать, что правило связывания, что complexType генерируется другим XSD?
У меня есть несколько всеобъемлющих XSD, которые включают одно и то же определение complexType для одного и того же члена. Каждый XSD имеет свое собственное пространство имен. Поэтому, когда я бегу xjc
в xsds я получаю один и тот же класс complexType, сгенерированный в каждом пространстве имен.
Это в конечном итоге очень запутанно и сложно в обращении. Я хотел бы создать привязку, которая говорит XJC не генерировать complexType для одного из XSD, а использовать класс, уже сгенерированный другим xsd.
Я попробовал следующее без успеха:
<jaxb:bindings schemaLocation="../xsd/sandboxlist.xsd">
<jaxb:bindings node="/xsd:schema">
<jaxb:schemaBindings>
<jaxb:package name="com.domain.schema.model.v4_0.sandboxlist"/>
</jaxb:schemaBindings>
</jaxb:bindings>
<jaxb:bindings node="//xsd:complexType[@name='SandboxType']">
<jaxb:class name="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" />
</jaxb:bindings>
</jaxb:bindings>
Я хочу сказать, что XJC SandboxType
в sandboxlist.xsd на самом деле должен быть класс com.domain.schema.model.v4_0.sandboxinfo.SandboxType
(исходя из другого XSD).
Какой правильный синтаксис для этого?
1 ответ
Вы можете достичь этого с помощью jaxb:class/@ref
:
<jaxb:class ref="com.domain.schema.model.v4_0.sandboxinfo.SandboxType" />
Но лучше используйте эпизоды. Генерация с использованием -episode
Параметр CLI, а затем добавьте свой JAR в xjc
командная строка.