3

我想为从 WSDL 生成的 Apache CXF Web 服务客户端的服务端点实现接口类添加 java 注释。

这是我正在使用的绑定文件,它应该利用来自http://confluence.highsource.org/display/J2B/Annotate+Plugin的 JAXB 注释插件:

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

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

谢谢。

4

2 回答 2

1

你试过用<annox:annotateClass>而不是<annox:annotate annox:class="org.jvnet.hk2.annotations.Contract" />

给出的例子:

这将使用 @SuppressWarnings("all") 注释生成的类 FindApplicationForApplicationSession

<jaxws:bindings node="xs:complexType[@name='findApplicationForApplicationSession']"> <annox:annotateClass>@java.lang.SuppressWarnings(name="all")</annox:annotateClass> </jaxws:bindings>

于 2015-08-06T07:09:01.877 回答
1

无法使用绑定文件注释 SEI 类。Apache CXF 的 cxf-codegen-plugin 使用速度模板来生成 SEI 类。因此您应该创建一个提供不同速度模板的插件。

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

生成器只需将注释添加到生成的 SEI。添加不依赖于生成上下文的注释也是一项简单的任务,只需将注释原样添加到自定义模板中即可。

于 2016-09-10T06:36:23.007 回答