0

细节:

  • Maven - 3.3.1 带有 jaxws-maven-plugin 版本 2.3 和我无法粘贴到此处的 wsdlUrl 上的目标 wsimport。
  • 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)并更改这些文件。然而,两者似乎都错了!

有没有办法可以操纵代码生成过程,或者我应该要求供应商进行更改?你觉得呢?你有没有什么想法?

非常感谢,非常感谢任何输入。

4

1 回答 1

0

答案在于供应商实际上打算让消费者使用 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 人工制品。希望这可以帮助某人。

于 2014-01-30T13:46:29.383 回答