JAXB генерирует классы определенных типов, реализуя пользовательский интерфейс

Я работаю над приложением, которое использует XJC для генерации Java POJO из XSD. Есть десятки схем, и это число будет расти. Приложение также должно иметь возможность обрабатывать разные версии одной и той же схемы, что означает, что у меня будет несколько схем, определяющих общие типы. Я пытаюсь настроить привязки так, чтобы определенные типы ядра реализовывали общий интерфейс. Плагин Inheritance Основ JAXB2, кажется, делает то, что мне нужно, но я не могу придумать правильный синтаксис.

Вот соответствующая часть моей схемы:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:my="http://example.com/core"
           targetNamespace="http://example.com/core"
           xmlns:xml="http://www.w3.org/XML/1998/namespace">

    ...

    <xs:complexType name="addressType">
        <xs:sequence>
            <xs:element name="Address" type="xs:string"/>
            <xs:element name="City" type="xs:string"/>
            <xs:element name="Province" type="xs:string"/>
            <xs:element name="Country" type="xs:string"/>
            <xs:element name="County" type="xs:string" minOccurs="0"/>
            <xs:element name="PostalCode" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    ...

</xs:schema>

... и вот как выглядит мой пользовательский файл привязки:

    <?xml version="1.0"?>
<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:inheritance="http://jaxb2-commons.dev.java.net/basic/inheritance"
    xmlns:my="http://example.com/core"
    jaxb:extensionBindingPrefixes="inheritance"
    version="2.1">

    <jaxb:bindings scd="x-schema::my" xmlns:my="http://example.com/core">
        <jaxb:globalBindings localScoping="toplevel">
            <jaxb:serializable/>
            <xjc:simple/>
        </jaxb:globalBindings>
        <jaxb:bindings scd="/type::my:addressType">
            <inheritance:implements>com.mysite.validator.ValidatableAddress</inheritance:implements> 
            <!--<xjc:superInterface name="com.mysite.validator.ValidatableAddress"/>-->
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

Я используюSCD подход, потому что во всех «традиционных» обязательных примерах, которые показывают, как использовать плагин наследования,SchemaLocation указано. Я хочу избежать необходимости указыватьSchemaLocation из-за нашего большого (и растущего) числа схем. Я не хочу менять файл привязки каждый раз, когда мы добавляем новую схему. Так,SCD Похоже, это удовлетворит это требование.

Однако, когда я запускаю сборку, используя вышеуказанную привязку, я получаю это:

  [xjc] [ERROR] cvc-elt.1: Cannot find the declaration of element 'inheritance:implements'.
  [xjc]   line 18 of file:/dev/workspace/my_app/etc/schemas/bindings-common.xml
  [xjc] failure in the XJC task. Use the Ant -verbose switch for more details
  [xjc] classLoader = java.net.URLClassLoader@ebcdbb
  [xjc] SharedSecrets.getJavaNetAccess()=java.net.URLClassLoader$7@14562c5

Если я закомментируюнаследования: инвентарь линия и раскомментируйтеXJC: суперинтерфейс ошибка исчезнет и сборка завершится успешно, но мойТип адреса классы не реализуют тип ValidatableAddress.

Может ли плагин наследования использоваться сSCD? Можно ли ограничить xjc: superInterface только определенными элементами?

Приветствия.

Ответы на вопрос(2)

Ваш ответ на вопрос