Определение имен пакетов для общих XSD с помощью xjc и привязок

Я пытаюсь сгенерировать классы Java из нескольких конкретных XSD с помощью xjc. Эти схемы имеют некоторые общие определения, поэтому они импортируют ряд общих XSD. В частности, они могут включать от нуля до всех распространенных XSD.

Я хотел бы сгенерировать все классы из определенного XSD в определенный пакет, но сохранить сгенерированные классы для общих схем в общем пакете, чтобы они не повторялись для каждой конкретной схемы в исходном дереве.

Я узнал, что пользовательские привязки можно использовать для указания пакетов на основе схемы, например:

<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
    <jxb:schemaBindings>
        <jxb:package name="mypackage.commonclasses"/>
    </jxb:schemaBindings>
</jxb:bindings>

У меня есть следующая структура:

schemas
| - common
| | - common1.xsd --> XSD with common types #1
| | - ...
| | - commonN.xsd --> XSD with common types #N
| | - commonBindings.xjb --> Defines package "mypackage.commons" for common*.xsd
| - specific1
| | - specific1.xsd --> Includes ../common/common{1-N}.xsd
| | - specific1.xjb --> Defines package "mypackage.specific1" for specific1.xsd
| - specificN
| | - specificN.xsd --> Includes only ../common/common1.xsd
| | - specificN.xjb --> Defines package "mypackage.specificN" for specificN.xsd

Все отлично работает с:

xjc -b schemas/specific1
    -b schemas/common 
    schemas/specific1/specific1.xsd

Он генерирует классы для Specific1.xsdв mypackage.Specific1и общие классы в mypackage.commons. Но когда я пытаюсь сгенерировать классы для SpecificN, xjcвыдает следующую ошибку:

[ERROR] "file:/drive/dir/schemas/common/common1.xsd" is not a part of
 this compilation. Is this a mistake for "/drive/dir/schemas/common/commonBindings.xjb"?
  line 2 of file:/drive/dir/schemas/common/commonBindings.xjb

Эта ошибка повторяется для каждого общего XSD, не импортированного ни в один конкретный xsd.

Можно ли каким-либо образом заставить xjcигнорировать привязки в commonBindings.xjb, которые не используются в XSD, для которого я создаю классы?

Или я иду в неправильном направлении, используя этот подход, и должен, например, использовать аннотации в конкретном xsd? Я хотел бы избежать изменения схем, если это возможно.

8
задан Xavi López says GoFundMonica 24 May 2012 в 16:56
поделиться