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 командная строка.

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