Аннотируйте класс JAX-WS SEI с помощью файла привязок
Я хочу добавить java-аннотации класса интерфейса реализации конечной точки сервиса для клиента веб-сервиса Apache CXF, сгенерированного из WSDL.
Это файл привязки, который я использую, который должен использовать плагин Annotate для JAXB с http://confluence.highsource.org/display/J2B/Annotate+Plugin:
<jaxws:bindings wsdlLocation="OptenetServices.wsdl"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:annox="http://annox.dev.java.net"
jaxws:extensionBindingPrefixes="annox">
<jaxws:bindings node="wsdl:portType">
<annox:annotate>
<annox:annotate annox:class="org.jvnet.hk2.annotations.Contract" />
</annox:annotate>
</jaxws:bindings>
</jaxws:bindings>
Ошибок нет, но аннотация просто не создается. Я могу подтвердить, что узел выбран и привязки используются, потому что если я изменю annox:annotate
с:
<jaxws:class name="Renamed">
<jaxws:javadoc>Blah blah</jaxws:javadoc>
</jaxws:class>
Интерфейс переименован и прокомментирован правильно.
Мне неясно, можно ли использовать annox в этом контексте и какова связь между jaxb и jaxws связыванием.
Генерация кода выполняется CFX через Maven:
<build>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/service.wsdl</wsdl>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-p</extraarg>
<extraarg>com.example.pkg</extraarg>
<extraarg>-b</extraarg>
<extraarg>${basedir}/src/main/wsdl/bindings.xml</extraarg>
<extraarg>-xjc-Xannotate</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.5</version>
</dependency>
<dependency>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics-annotate</artifactId>
<version>0.6.5</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
Благодарю.
2 ответа
Вы пробовали это с <annox:annotateClass>
вместо <annox:annotate annox:class="org.jvnet.hk2.annotations.Contract" />
Пример дан:
Это аннотирует сгенерированный класс FindApplicationForApplicationSession с @SuppressWarnings("all")
<jaxws:bindings node="xs:complexType[@name='findApplicationForApplicationSession']">
<annox:annotateClass>@java.lang.SuppressWarnings(name="all")</annox:annotateClass>
</jaxws:bindings>
Аннотировать классы SEI с помощью файла привязки невозможно. Apache CXF cxf-codegen-plugin использует шаблоны скорости для генерации классов SEI. Поэтому вы должны создать плагин, который предоставляет другой шаблон скорости.
Пример: https://github.com/valmol/samples-cxf-codegen-plugin/
Генератор просто добавляет комментарии к сгенерированному SEI. Добавление аннотации, которая не зависит от сгенерированного контекста, также является простой задачей, просто добавьте аннотацию в пользовательский шаблон как есть.