Аннотируйте класс 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. Добавление аннотации, которая не зависит от сгенерированного контекста, также является простой задачей, просто добавьте аннотацию в пользовательский шаблон как есть.

Другие вопросы по тегам