【问题标题】:Using multiple WSDLs with Axis2 wsdl2code Maven plugin将多个 WSDL 与 Axis2 wsdl2code Maven 插件一起使用
【发布时间】:2011-10-09 21:21:09
【问题描述】:

我正在使用 Maven2 创建一个使用多个 Web 服务的客户端。我仅限于使用 Axis2 或其他支持 Apache HttpClient 的框架作为 HTTP 管道,因为这些服务需要与基于 HttpClient 的托管证书解决方案集成。

我熟悉 CXF 的代码生成 Maven 插件,它允许在代码生成期间输入多个 WSDL。但是,Axis2 代码生成插件一次只能处理一个 WSDL。

如何让 Maven 在代码生成阶段为每个 WSDL 运行 wsdl2code?我需要多个配置文件吗?

POM 的构建部分如下所示:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <unpackClasses>true</unpackClasses>
                <databindingName>adb</databindingName>
                <packageName>org.example.stackoverflow.axis2-maven</packageName>
                <!-- only one of these actually gets used by code generator -->
                <wsdlFile>src/main/resources/service1.wsdl</wsdlFile>
                <wsdlFile>src/main/resources/service2.wsdl</wsdlFile>
                <outputDirectory>target/generated-sources</outputDirectory>
                <syncMode>sync</syncMode>
            </configuration>
        </plugin>
    </plugins>
</build>

参考文献

【问题讨论】:

    标签: java maven code-generation axis2 wsdl2code


    【解决方案1】:

    你可以试试这个,我现在无法测试,但我认为应该可以工作

       <plugin>
            <groupId>org.apache.axis2</groupId>
            <artifactId>axis2-wsdl2code-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <id>ws1</id>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                       <unpackClasses>true</unpackClasses>
                       <databindingName>adb</databindingName>
                       <packageName>org.example.stackoverflow.axis2-maven</packageName>
                       <wsdlFile>src/main/resources/service1.wsdl</wsdlFile>
                       <outputDirectory>target/generated-sources</outputDirectory>
                       <syncMode>sync</syncMode>
                    </configuration>
                </execution>
                <execution>
                    <id>ws2</id>
                    <goals>
                        <goal>wsdl2code</goal>
                    </goals>
                    <configuration>
                       <unpackClasses>true</unpackClasses>
                       <databindingName>adb</databindingName>
                       <packageName>org.example.stackoverflow.axis2-maven</packageName>
                       <wsdlFile>src/main/resources/service2.wsdl</wsdlFile>
                       <outputDirectory>target/generated-sources</outputDirectory>
                       <syncMode>sync</syncMode>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    

    【讨论】:

    • 是的,做到了,谢谢。请注意,POM 没有按原样验证。我收到了:You cannot have two plugin executions with the same (or missing) &lt;id/&gt; elements. 消息。在每次执行添加一个唯一的&lt;id&gt; 后,一切都很好。
    • 如果我有 50 个需要生成的 WSDL 怎么办。这可以使用 maven 插件吗?
    • 如何将输出目录位置更改为 src/main/java/.. 当我这样做时,它正在更改 packageName 并使其成为 src.org.example...... ......我该如何解决这个问题?
    • @AppleBud 对于源目录使用${project.build.sourceDirectory} 属性;但是,在构建过程中在源目录中生成内容并不是一种健康的做法。所以你最好关闭generate-sources阶段的自动生成,通过在执行配置中使用`never`,然后在需要的时候直接调用目标。
    • @AppleBud goals 只有在绑定到 maven 构建生命周期中定义的 phases 时才会执行。默认情况下,axis2-maven 插件绑定到 generate-sources 阶段,因此它被执行。如我所说,要取消绑定,假设您使用的是 maven 3,只需使用 never (从不是不存在的阶段),如下所述:stackoverflow.com/questions/7800647/…
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 2015-08-20
    • 2015-04-18
    • 2015-10-24
    • 1970-01-01
    • 2013-02-01
    • 2020-08-31
    • 2016-01-12
    相关资源
    最近更新 更多