Может ли ApacheCXF генерировать полные конструкторы при использовании плагина cxf-codegen для Maven?

Я генерирую сервер/клиент из своих wsdl/xsd, используя плагин cxf-codegen для Maven. Все созданные типы имеют конструкторы без аргументов по умолчанию, что затрудняет работу с ними.

Есть ли способ заставить Apache CXF генерировать полный конструктор со всеми членами класса в качестве аргументов?


person david1563    schedule 30.03.2011    source источник
comment
Я столкнулся с той же проблемой. Если вы нашли решение, пожалуйста, прокомментируйте.   -  person heldt    schedule 14.12.2011


Ответы (1)


Этот плагин — просто причудливая оболочка вокруг xjc.

Есть два плагина xjc, которые решают вашу проблему:

  • Value-constructor именно то, что вы ищете.
  • Fluent-api не совсем то, что вам нужно, но многие предпочитают свободный API для конструкторов значений.

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

<plugin>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-codegen-plugin</artifactId>
  <configuration>
    <defaultOptions>
      <extraargs>
        <extraarg>-xjc-Xvalue-constructor</extraarg>
      </extraargs>
    </defaultOptions>
  </configuration>
  <dependencies>
    <dependency>
      <groupId>org.jvnet.jaxb2_commons</groupId>
      <artifactId>jaxb2-value-constructor</artifactId>
      <version>3.0</version>
    </dependency>
    <dependency>
      <groupId>org.jvnet.jaxb2_commons</groupId>
      <artifactId>jaxb2-basics</artifactId>
      <version>0.6.4</version>
    </dependency>
  </dependencies>
</plugin>

Примечание: вышеизложенное делает это значение по умолчанию для всех исполнений, если вы хотите включить эти параметры только для определенного выполнения, просто добавьте бит <configuration> в это конкретное выполнение.

person Stephen Connolly    schedule 21.08.2012
comment
Спасибо! Ранее я пытался расширить cxf-xjc-plugin с помощью org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.8.2 и потерпел неудачу, но на вашем примере стало ясно, что я должен использовать org.jvnet.jaxb2_commons:jaxb2-basics:0.6.4 - person pulkitsinghal; 28.12.2013
comment
Спасибо. Для двух предоставленных ссылок я просто получаю уведомление о перемещении. Пытались их извергнуть, но попали только в репозитории github только с кодом? - person eugenevd; 09.06.2017