gpt4 book ai didi

java - 如何告诉 maven/wsimport 在生成代码时忽略某些架构文件?

转载 作者:太空宇宙 更新时间:2023-11-04 07:35:09 24 4
gpt4 key购买 nike

我需要集成多个 Web 服务,我可以通过使用 Maven 的 wsimport 插件构建 Web 服务客户端来实现此目的。相关 Web 服务都引用企业通用架构文件,因此生成单独的客户端会导致重复代码,其中每个 Web 服务客户端 jar 都包含相同架构的实现。

我想减少这些冗余代码,所以我的第一个想法是使用从公共(public)模式生成的公共(public)代码来构建一个独立的 jar。这里的问题是,当我使用 Maven 从 WSDL 生成 Web 服务客户端时,它仍然为 WSDL 引用的所有模式构建代码 - 我如何告诉 maven为公共(public)模式文件生成代码,因为代码已经在引用的库中?

我确实尝试过这个:

<resources>
<resource>
<directory>${basedir}/wsdl</directory>
<excludes>
<exclude>**/my_schema.xsd</exclude>
</excludes>
</resource>
</resources>

但是 wsimport 仍然为 my_schema.xsd 生成代码,即使我为已经包含此代码的 jar 创建了依赖项:

<dependencies>
<dependency>
<artifactId>MyCommonCode</artifactId>
<groupId>com.myCompany</groupId>
<version>1.0.0</version>
</dependency>
</dependencies>

最佳答案

我正在尝试的解决方案使用情节。在通用模式的 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 服务,并将其作为绑定(bind)文件引用,如下所示:

<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>

我仍在对此进行测试,但它似乎有效。唯一尴尬的部分是将剧集文件移动到其他客户端,但可能有一种方法可以实现自动化。

关于java - 如何告诉 maven/wsimport 在生成代码时忽略某些架构文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com