3

WSDL から生成された Apache CXF Web サービス クライアントのサービス エンドポイント実装インターフェイス クラスに Java アノテーションを追加したいと考えています。

これは、 http : //confluence.highsource.org/display/J2B/Annotate+Plugin から JAXB 用の Annotate プラグインを利用する必要がある、私が使用しているバインディング ファイルです。

<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 バインディングの関係は不明です。

コード生成は、Maven を介して CFX によって処理されます。

<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>

ありがとう。

4

2 に答える 2

1

バインディング ファイルを使用して SEI クラスに注釈を付けることはできません。Apache CXF の cxf-codegen-plugin は速度テンプレートを使用して SEI クラスを生成します。したがって、別の速度テンプレートを提供するプラグインを作成する必要があります。

例: https://github.com/valmol/samples-cxf-codegen-plugin/

ジェネレーターは、生成された SEI にコメントを追加するだけです。生成されたコンテキストに依存しないアノテーションの追加も、カスタム テンプレートにそのままアノテーションを追加するだけの簡単な作業です。

于 2016-09-10T06:36:23.007 に答える
1

<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>

于 2015-08-06T07:09:01.877 に答える