我正在开展一个相当大的WS项目,涉及20多个不同的WebServices.这些Web服务虽然彼此独立,但共享一大批通用类型.我们在构建脚本中使用wsimport作为蚂蚁目标来生成代理类.
问题:
随着我们的WS(和相应的WSDL)的数量增加,我们注意到,代理类的构建时间一直在攀升.经过进一步的调查(和剖析),我们发现,wsimport正在花费大量的时间来重复生成常见的类型.已经有一点,生成,编译和打包这些代理类及其常见类型大概需要15-20分钟.这对我们来说是一个问题,我们正在寻找减少构建时间的方法.
题:
有没有办法只生成常见的类型一次?我已经研究了谷歌搜索发现的一些解决方案.一个涉及编写一个解析WSDL并将它们组合成一个WSDL的WSDL累加器,所以wsimport只被调用一次.另一个暗示使用情节文件但进一步调查只发现使用这种方法存在问题.
注意:我看到一些较旧的类似问题,但没有一个有任何答案.
wsimport multiple generated wsdl’s
How can I tell wsimport that separate WSDL files are referring to the same object classes?
解决方法
首先,我将使用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>
这是设置为仅从一个WSDL生成,但是可以轻松地附加更多的WSDL,而在其他情况下我已经这样做了.