繁体   English   中英

Maven jax-ws插件wsimport在生成的代码中给出“嵌套类型x无法隐藏封闭类型”

[英]Maven jax-ws plugin wsimport giving “The nested type x cannot hide an enclosing type” in generated code

详情:

  • 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的项目中产生红色。

我知道的:

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

有什么方法可以操纵代码生成过程,还是应该要求供应商进行更改? 你怎么看?

非常感谢,非常感谢您的投入。

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

在Windows上(如果您有此工具):

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

使用Maven插件时,请在“ plugins”标签下(一定要弄清您将需要的依赖关系-此处未给出):

            <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人工制品。 希望这对某人有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM