【问题标题】:Maven jax-ws plugin wsimport giving "The nested type x cannot hide an enclosing type" in generated codeMaven jax-ws 插件 wsimport 在生成的代码中给出“嵌套类型 x 无法隐藏封闭类型”
【发布时间】:2014-01-29 07:29:36
【问题描述】:

详情:

  • Maven - 3.3.1 与 jaxws-maven-plugin 版本 2.3 和目标 wsimport 上的 wsdlUrl 我无法粘贴到这里。
  • Java 1.7

maven pom 内容示例:

<plugin>
                <groupId>org.jvnet.jax-ws-commons</groupId>
                <artifactId>jaxws-maven-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <id>wsdla-exec-1</id>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>com.yourcompany.package</packageName>
                            <target>2.1</target>
                            <verbose>true</verbose>
                            <!-- Fix naming resolution due to ChangeOrderResponse duplicate stanza -->
                            <args>
                                <arg>-B-XautoNameResolution</arg>
                            </args>
                            <wsdlDirectory>src/main/resources</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFiles>service1.wsdl</wsdlFiles>
                            </wsdlFiles>
                            <wsdlLocation>/*</wsdlLocation>
                            <sourceDestDir>src/main/java</sourceDestDir>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wsdla-exec-2</id>
                        <goals>
                            <goal>wsimport</goal>
                        </goals>
                        <configuration>
                            <packageName>com.yourcompany.package</packageName>
                            <target>2.1</target>
                            <verbose>true</verbose>
                            <!-- Fix naming resolution due to ChangeOrderResponse duplicate stanza -->
                            <args>
                                <arg>-B-XautoNameResolution</arg>
                            </args>
                            <wsdlDirectory>src/main/resources</wsdlDirectory>
                            <wsdlFiles>
                                <wsdlFile>service2.wsdl</wsdlFile>
                            </wsdlFiles>
                            <wsdlLocation>/*</wsdlLocation>
                            <sourceDestDir>src/main/java</sourceDestDir>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

说明:

我在 Mule 中从 wsdl 生成客户端代码已经有一段时间了,它一直都是相当直接且高效的,但现在我遇到了一个障碍,我可能会在这里找到正确方向的指针。

基本上,在从 wsdl 生成的代码中,有一个与容器类同名的嵌套类,这会在我使用此 wsdl 的项目中产生红色。

我知道的:

我可以手动更改代码和 viola,或者更好的是我可以更改 wsimport 以使用静态文件(从 url 复制 - 包括所有 xsd)并更改这些文件。然而,两者似乎都错了!

有没有一种方法可以控制代码生成过程,或者我应该要求供应商进行更改?你有什么想法?

非常感谢,非常感谢您的任何意见。

【问题讨论】:

    标签: java wsdl jax-ws mule jaxws-maven-plugin


    【解决方案1】:

    答案在于供应商实际上希望消费者使用 xmlbeans 进行绑定,而不是按照当前的 jax-ws 标准使用 jaxb。因此,为了从 wsdl 创建客户端代码,我可以执行以下任一操作。

    在 Windows 上(如果你有工具):

    md YourServiceFolderName
    WSDL2java -uri YourService.wsdl -ss -sd -ssi -g -d xmlbeans -o YourServiceFolderName
    

    使用 Maven 插件,在您的“插件”标签下(请务必整理好您需要的依赖项 - 此处未提供):

                <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>2.7.8</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>YourService?wsdl</wsdl>
                                    <extraargs>
                                        <extraarg>-databinding</extraarg>
                                        <extraarg>xmlbeans</extraarg>
                                    </extraargs>
                                </wsdlOption>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
    

    这应该为您提供继续使用服务所需的所有 Java 人工制品。希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多