Как получить Maven-Jaxws-плагин для генерации @XmlElementWrapper на классах, созданных из XSD?
Я использую maven-jaxws-plugin для генерации классов Java из моей схемы wsdl. Он не генерирует аннотацию @XmlElementWrapper в сгенерированных классах. Из этого поста я понимаю, что мне нужно использовать плагин jaxb-xew-plugin, но я не могу заставить его работать с плагином maven-jaxws-plugin. Любая помощь будет оценена. Вот конфиг я пробовал
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<phase>generate-resources</phase>
<configuration>
<xjcArgs>
<xjcArg>-no-header</xjcArg>
<xjcArg>-Xxew</xjcArg>
<xjcArg>-Xxew:instantiate lazy</xjcArg>
<xjcArg>-Xxew:delete</xjcArg>
</xjcArgs>
<extension>true</extension>
<wsdlDirectory>${basedir}/src/main/resources</wsdlDirectory>
<wsdlFiles>
<wsdlFile>attribute-service.wsdl</wsdlFile>
</wsdlFiles>
<sourceDestDir>${project.build.directory}/generated</sourceDestDir>
<verbose>true</verbose>
<keep>true</keep>
<plugins>
<plugin>
<groupId>com.github.jaxb-xew-plugin</groupId>
<artifactId>jaxb-xew-plugin</artifactId>
<version>1.0</version>
</plugin>
</plugins>
</configuration>
</execution>
</executions>
</plugin>
Если его можно интегрировать только с плагином maven-jaxb2, не могли бы вы помочь мне запустить мой веб-сервис? По сути, как мне указать wsdl и как генерировать классы Service? (с аннотацией @WebService)
Спасибо,
Бхагья
2 ответа
Хотя на момент написания этой статьи мне было 10 месяцев, я отвечаю на тот случай, если кому-то это понадобится.
с помощью jaxws-maven-plugin и с помощью jaxb-xew-plugin вы можете сгенерировать аннотацию @XmlElementWrapper для ваших объектов списка / массива
при условии, что ваш wsdl имеет следующую схему:
<xs:element name="books" minOccurs="0" >
<xs:complexType>
<xs:sequence>
<xs:element name="book" type="Book" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
он генерирует Java как:
@XmlElementWrapper(name = "books")
@XmlElement(name = "book")
protected List<Book> books;
и вот сборка / плагин
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.12</version>
<configuration>
<wsdlDirectory>${project.basedir}/src/main/webapp/WEB-INF/wsdl/</wsdlDirectory>
<xjcArgs>
<xjcArg>-no-header</xjcArg>
<xjcArg>-Xxew</xjcArg>
<xjcArg>-Xxew:instantiate lazy</xjcArg>
<xjcArg>-Xxew:delete</xjcArg>
</xjcArgs>
</configuration>
<executions>
<execution>
<id>wsdl_import</id>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>com.github.jaxb-xew-plugin</groupId>
<artifactId>jaxb-xew-plugin</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>2.2.4-1</version>
</dependency>
</dependencies>
</plugin>
Есть примеры конфигурации для плагина jaxws maven, доступные на странице примера плагина jaxb xew. jaxws-maven-plugin 2.3.1-b03 отлично работает с jaxb-xew-plugin 1.2.