2015-10-08 2 views
2

У меня есть файл hyperjaxb xsd и привязка. Как заставить встроенные классы реализовать пользовательский интерфейс, объявленный в другом артефакте? Я знаю, что могу заставить их продлить еще один класс, используяНастройка сопоставления гиперяксом для принудительной реализации внешнего интерфейса

<xjc:superClass name="com.sample.jpa.entities.BaseEntity"/> 

Но мне они нужны и для реализации другого интерфейса. Как я могу это достичь?

+0

Проверьте плагин наследования в JAXB2-Basics. – lexicore

+0

Может ли это использоваться в сочетании с hyperjaxb? –

ответ

1

Отказ от ответственности: Автор Hyperjaxb и JAXB2-Basics здесь.

Вы можете использовать Inheritance plugin от JAXB2-Basics вместе с Hyperjaxb. Вы можете расширить класс или реализовать интерфейс. Плагин также может обрабатывать дженерики, чтобы вы могли даже делать такие вещи, как <inheritance:implements>com.acme.foo.MyInterface&lt;com.acme.foo.SomeClass&gt;</inheritance:implements>.

Краткое руководство:

  • Включение й плагин через <arg>-Xinheritance</arg> в вашем pom.xml. Что-то вроде:

    <plugin> 
         <groupId>org.jvnet.hyperjaxb3</groupId> 
         <artifactId>maven-hyperjaxb3-plugin</artifactId> 
         <configuration> 
          <!--result>mappingFiles</result--> 
          <roundtripTestClassName>org.jvnet.hyperjaxb3.ejb.tests.cuone.RoundtripTest</roundtripTestClassName> 
          <args> 
           <arg>-Xinheritance</arg> 
          </args> 
         </configuration> 
        </plugin> 
    

    JAXB2-Basics является зависимость, если Hyperjaxb так что вы, скорее всего, не нужно будет делать что-нибудь еще здесь. См. example (для аннотированного плагина, но это не имеет значения).

  • Настройте свои сложные типы с помощью inheritance:extends или inheritance:implements элементов настройки. Пример:

    <jaxb:bindings schemaLocation="schema.xsd" node="/xsd:schema"> 
        <jaxb:bindings node="xsd:complexType[@name='WillBeMadeCloneableType']"> 
         <inheritance:implements>java.lang.Cloneable</inheritance:implements> 
        </jaxb:bindings> 
    </jaxb:bindings> 
    

Это должно быть.

+0

Отлично! Как я могу сделать это глобально? Применить наследование ко всем типам, определенным в моем xsd? –

+0

@AlfredoA. Просто применитесь ко многим узлам через XPath. См. Http://stackoverflow.com/questions/12043255/jaxb-bindingx-xml-results-in-too-many-target-nodes – lexicore