Java 优化具有常见类型的多个wsdl的WSImport
我正在从事一个相当大的WS项目,涉及20多种不同的Web服务。这些Web服务虽然彼此独立,但共享一组相当大的公共类型。我们在构建脚本中使用wsimport作为ant目标来生成代理类 问题: 随着我们的WS(和相应的WSDL)数量的增加,我们注意到代理类的构建时间急剧增加。经过进一步的调查(和分析),我们发现wsimport花费了大量的构建时间来重复生成公共类型。生成、编译和打包这些代理类及其常见类型大约需要15-20分钟。这对我们来说是个问题,我们正在寻找缩短构建时间的方法 问题: 有没有办法只生成一次通用类型?我通过谷歌搜索找到了一些解决方案。其中一个涉及编写WSDL累加器,该累加器解析WSDL并将它们组合成单个WSDL,因此只调用一次wsimport。另一个暗示使用插曲文件,但进一步调查只发现使用这种方法存在问题 注:我见过一些类似的老问题,但都没有答案Java 优化具有常见类型的多个wsdl的WSImport,java,web-services,soap,wsdl,wsimport,Java,Web Services,Soap,Wsdl,Wsimport,我正在从事一个相当大的WS项目,涉及20多种不同的Web服务。这些Web服务虽然彼此独立,但共享一组相当大的公共类型。我们在构建脚本中使用wsimport作为ant目标来生成代理类 问题: 随着我们的WS(和相应的WSDL)数量的增加,我们注意到代理类的构建时间急剧增加。经过进一步的调查(和分析),我们发现wsimport花费了大量的构建时间来重复生成公共类型。生成、编译和打包这些代理类及其常见类型大约需要15-20分钟。这对我们来说是个问题,我们正在寻找缩短构建时间的方法 问题: 有没有办法只
首先,我将使用ApacheCXF进行构建,因为它可以同时处理多个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>
org.apache.cxf
cxf-codegen插件
${apache.cxf.version}
生成源
生成源
${project.build.directory}/生成的源/
${wsdlDir}/jax-ws-catalog.xml
${wsdlDir}/jaxb-bindings.xml
${wsdlDir}/jaxws-bindings.xml
真的
-客户
-xjc-Xbug671-->
-生成的xjc标记
${wsdlDir}/cis.wsdl
wsdl2java
org.apache.cxf.xjc插件
cxf-xjc-bug671
${apache.cxf.xjc.version}
这是设置为仅从一个WSDL生成的,但是可以轻松地附加更多的WSDL,我在其他情况下也这样做了。您是否尝试过保留选项?您将无法这样做。。。。WSDLAccumlator是您最好的选择,但您不喜欢它,您也可以使用绑定跳过后续wsdl上常见类型的生成。关键是每次在构建时生成工件并没有什么好处。。。只需将生成的类保留为源(根据您的喜好,是否在单独的jar中)。