我需要集成几个Web服务,我可以通过使用Maven的wsimport插件构建Web服务客户端来实现这一点。有问题的Web服务都引用了企业通用模式文件,因此生成单独的客户端会导致重复的代码,其中每个Web服务客户端jar都包含相同模式的实现。
我想减少这个冗余代码,所以我首先想到的是使用从公共模式生成的公共代码构建一个独立的jar 。这里的问题是,当我使用maven从WSDL生成Web服务客户端时,仍将为WSDL构建所有模式引用的代码 - 我如何告诉maven 不< / em>生成公共模式文件的代码,因为代码已经在引用的库中了?
我试过这个:
<resources>
<resource>
<directory>${basedir}/wsdl</directory>
<excludes>
<exclude>**/my_schema.xsd</exclude>
</excludes>
</resource>
</resources>
但即使我为已包含此代码的jar创建了依赖项,wsimport仍会为my_schema.xsd
生成代码:
<dependencies>
<dependency>
<artifactId>MyCommonCode</artifactId>
<groupId>com.myCompany</groupId>
<version>1.0.0</version>
</dependency>
</dependencies>
答案 0 :(得分:1)
我正在尝试的解决方案使用剧集。在公共模式的POM文件中,我有类似的东西:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<bindingDirectory>${basedir}/src/bindings</bindingDirectory>
<!-- The schema directory or xsd files. -->
<schemaDirectory>${basedir}/src/schema</schemaDirectory>
<!-- The working directory to create the generated java source files. -->
<outputDirectory>${build.directory}/generated-sources/jaxb</outputDirectory>
<arguments>-episode "${build.directory}/generated-sources/myCommonSchema.episode"</arguments>
</configuration>
</execution>
</executions>
</plugin>
此处的关键是<arguments>-episode "${build.directory}/generated-sources/myCommonSchema.episode"</arguments>
- 这会生成一个剧集文件(在指定目录中名为“myCommonSchema.episode”)。下一步是将剧集文件复制到依赖于公共架构的Web服务,并将其作为绑定文件引用 :
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>MyService</id>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<bindingDirectory>${basedir}/src/</bindingDirectory>
<bindingFiles>
<bindingFile>myCommonSchema.episode</bindingFile>
</bindingFiles>
<wsdlDirectory>${basedir}/src/wsdl/MyWebService</wsdlDirectory>
<wsdlFiles>
<wsdlFile>MyWebService.wsdl</wsdlFile>
</wsdlFiles>
<wsdlLocation>META-INF/wsdl/MyWebService/MyWebService.wsdl</wsdlLocation>
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
<verbose>true</verbose>
<xdebug>true</xdebug>
<extension>true</extension>
<xjcArgs>
<xjcArg>-Xannotate</xjcArg>
</xjcArgs>
</configuration>
</execution>
我还在测试,但它似乎有效。唯一令人尴尬的部分是将剧集文件移动到其他客户端,但可能有一种方法可以实现自动化。