Автоматически сгенерированная JAXB иерархия классов - PullRequest
2 голосов
/ 11 января 2011

Я генерирую код Java на основе различных WSDL. У нас есть разные WSDL для каждой новой версии WebService, каждая из которых имеет свое пространство имен.

Дело в том, что обычно изменения минимальны от одного выпуска к другому, но я хочу разделить классы по пространству имен.

Есть ли способ настроить JAXB так, чтобы автоматически сгенерированные классы реализовывали один интерфейс / расширяли один класс, чтобы я мог ссылаться на любой из них, не меняя свой код?

Пустой пример:

Метод WebService: listScripts(ResultSize size);

Автоматически сгенерированные классы:

  • com.test.ws1.ResultSize
  • com.test.ws2.ResultSize

Оба класса абсолютно одинаковы. Есть ли способ расположить их в иерархии классов, чтобы мой код был изолирован от изменений в номерах версий? то есть интерфейс com.test.ResultSize, реализованный обоими классами?

Ответы [ 2 ]

1 голос
/ 15 января 2011

Оказалось, что я могу использовать плагин, предоставленный в пакете Основ JAXB2:

Плагин наследования

С помощью этого плагина я могу указывать различные суперклассы для своих сгенерированных, хотя я не мог сделать автоматически сгенерированные перечисления для реализации данного интерфейса.

Использовать его в Maven было больно (я генерирую классы из WSDL, не использую JAXB напрямую), поэтому я переключился на внешнюю задачу Ant, как указано в этом блоге

1 голос
/ 11 января 2011

XJC имеет расширение для этой цели

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
           jaxb:extensionBindingPrefixes="xjc"
           jaxb:version="2.0">

    <xs:annotation>
       <xs:appinfo>
          <jaxb:globalBindings>
           <xjc:superClass name="com.mycompany.xml.UserRootObject"/>
          </jaxb:globalBindings>
       </xs:appinfo>
    </xs:annotation>
.
.
.
</xs:schema>

Для получения дополнительной информации см .:

Аннотации схемы также могутбыть предоставлены через внешний файл привязок.Для примера см .:

...