Hya*_*elo 11 java soap wsdl web-services wsimport
我正在开发一个涉及20多个不同WebServices的相当大的WS项目.这些Web服务虽然彼此独立,但它们共享一组相当大的常见类型.我们在构建脚本中使用wsimport作为ant目标来生成代理类.
问题:随着我们的WS(和相应的WSDL)的数量增加,我们注意到我们的代理类的构建时间已经非常陡峭.经过进一步的调查(和分析),我们发现wsimport花费了大量的构建时间来重复生成常见类型.它已经达到了这样的程度,即生成,编译和打包这些代理类及其常见类型大约需要15-20分钟.这对我们来说是一个问题,我们正在寻找缩短构建时间的方法.
问题:有没有办法只生成一次常见类型?我研究了谷歌搜索找到的一些解决方案.一个是编写WSDL累加器,它解析WSDL并将它们组合成一个WSDL,因此wsimport只被调用一次.另一个暗示使用剧集文件,但进一步调查只是表明使用这种方法存在问题.
注意:我看过一些较旧的类似问题,但没有一个有任何答案.
首先,我会使用 apache cxf 来进行构建,因为它可以同时处理多个 WSDL,而且更加现代。它将更加高效并生成更好的类。其次,除非 WSDL 文件发生很大变化,否则我不会再担心它。相反,我会将它们放入一个单独的工件中并构建一次,然后将它们作为自己的工件导入到项目中。该存档中唯一未生成的内容应该是用于测试端点的测试代码。至于构建,我成功使用的 Maven 插件配置粘贴在下面。
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${apache.cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/</sourceRoot>
<defaultOptions>
<catalog>${wsdlDir}/jax-ws-catalog.xml</catalog>
<bindingFiles>
<bindingFile>${wsdlDir}/jaxb-bindings.xml</bindingFile>
<bindingFile>${wsdlDir}/jaxws-bindings.xml</bindingFile>
</bindingFiles>
<noAddressBinding>true</noAddressBinding>
<extraargs>
<extraarg>-client</extraarg>
<extraarg>-xjc-Xbug671</extraarg>-->
<extraarg>-xjc-mark-generated</extraarg>
</extraargs>
</defaultOptions>
<wsdlOptions>
<wsdlOption>
<wsdl>${wsdlDir}/cis.wsdl</wsdl>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.cxf.xjcplugins</groupId>
<artifactId>cxf-xjc-bug671</artifactId>
<version>${apache.cxf.xjc.version}</version>
</dependency>
</dependencies>
</plugin>
Run Code Online (Sandbox Code Playgroud)
设置为仅从一个 WSDL 生成,但可以轻松附加更多 WSDL,我在其他情况下也这样做过。
| 归档时间: |
|
| 查看次数: |
2228 次 |
| 最近记录: |