【问题标题】:Not able to generate client code with wsdl2java and maven using CXF无法使用 CXF 生成带有 wsdl2java 和 maven 的客户端代码
【发布时间】:2013-05-14 17:06:09
【问题描述】:

我正在使用 maven cxf-codegen-plugin 从 wsdl 生成客户端文件,但无法这样做。

我希望扫描文件夹src/main/wsdl 中的所有 wsdl 文件,并在单独的文件夹中生成相应的客户端。请帮忙。

我的 pom.xml 是:

<build>
    <finalName>someFileName</finalName>
    <pluginManagement>
        <plugins>
            <plugin>
                 <groupId>org.apache.cxf</groupId>
                 <artifactId>cxf-codegen-plugin</artifactId>
                 <version>2.2.3</version>
                 <executions>
                     <execution>
                        <id>generate-sources</id>
                        <phase>process-resources</phase>
                         <configuration>
                             <sourceRoot>src/main/java</sourceRoot>
                             <wsdlRoot>${basedir}/src/main/wsdl</wsdlRoot> 
                        </configuration>
                         <goals>
                             <goal>wsdl2java</goal>
                         </goals>
                     </execution>
                 </executions>
             </plugin>
         </plugins>
    </pluginManagement>
</build>

【问题讨论】:

  • 你得到的错误是什么?
  • 我没有收到任何错误。但是没有生成客户端文件
  • 当我从 pom.xml 中删除 时,我就能够成功生成文件。但是 Eclipse 在 标记处显示错误,即“生命周期配置未涵盖插件执行”但构建成功
  • 不要打扰 eclipse 。尝试清理 elipse ..当构建成功时完成 ..
  • 您需要更新版本的 CXF 才能满足 m2e 的生命周期要求。 2.2.3 完全早于 m2e。

标签: maven-2 cxf wsdl2java


【解决方案1】:

这是我在 2.7.4 版中的做法,并在不同的包中创建生成的代码:

<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/src/main/java</sourceRoot>
                        <wsdlOptions>
                            <wsdlOption>
                                <wsdl>${basedir}/src/main/wsdl/MyWsdl1.wsdl</wsdl>
                                <extraargs>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>urn:mycompany:myproduct1:v1_0=com.my.project.product1</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>http://www.w3.org/2001/XMLSchema=com.my.project.common</extraarg>
                                </extraargs>
                            </wsdlOption>
                            <wsdlOption>
                                <wsdl>${basedir}/src/main/wsdl/MyWsdl2.wsdl</wsdl>
                                <extraargs>
                                    <extraarg>-client</extraarg>
                                    <extraarg>-verbose</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>urn:mycompany:myproduct2:v1_0=com.my.project.product2</extraarg>
                                    <extraarg>-p</extraarg>
                                    <extraarg>http://www.w3.org/2001/XMLSchema=com.my.project.common</extraarg>
                                </extraargs>
                            </wsdlOption>
                        </wsdlOptions>
                    </configuration>
                    <goals>
                        <goal>wsdl2java</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

您可以在此处找到有关额外参数的更多信息: http://cxf.apache.org/docs/wsdl-to-java.html

对于 wsdl 文件夹的自动扫描,这也很好用:

<configuration>
                        <sourceRoot>${project.build.directory}/generated/src/main/java</sourceRoot>
                        <wsdlRoot>${basedir}/src/main/wsdl</wsdlRoot>
<includes>
    <include>**/*.wsdl</include>
</includes>
</configuration>

希望对你有帮助!

【讨论】:

  • 我认为 标签不是必需的
【解决方案2】:

我意识到这是一个老问题,但我只是遇到了这个问题,所以我想为他人的利益而回答。注释掉 &lt;pluginManagement&gt; 标记是对的,请参见 here。但是对于 Eclipse 中的错误来说:

生命周期配置未涵盖插件执行

您需要为 build-helper-maven-plugin 安装 m2e 连接器(点击错误,Eclipse 会引导您安装)

【讨论】:

  • 这也适用于我。当我删除 标记时,尽管 Eclipse 给出了错误命令行,但我能够生成源代码。 :)
【解决方案3】:

我把plugins标签放在pluginManagement标签里面,错误消失了:

<pluginManagement>
   <plugins>
        <plugin>

            ..........................

        </plugin>
   </plugins> 
</pluginManagement>

【讨论】:

  • 标签怎么写?我尝试发布时未显示标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2017-03-06
  • 1970-01-01
  • 2013-10-24
相关资源
最近更新 更多