我有一个 JAX-WS 驱动的 Web 服务,我们从另一个 Maven 模块(我称之为 ws-consumer
)中生成一个 Web 服务客户端的 WSDL。
无论好坏,我们将“已发布的 WSDL”(服务在发布时持有/生成的 WSDL 和 XSD 的版本)复制到我们的 src/wsdl
文件夹 ws-consumer
和然后使用 org.jvnet 中的 jaxws-maven-plugin
使用 jaxws:wsimport
使用以下(截断的)配置生成客户端:
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<!--phase>generate-sources</phase -->
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<wsdlDirectory>src/main/resources/META-INF/wsdl/</wsdlDirectory>
<wsdlFiles>
<wsdlFile>MyWS/MyWS.wsdl</wsdlFile>
</wsdlFiles>
</configuration>
</execution>
</executions>
</plugin>
现在,生成的客户端代码在类级别应用了以下注释:
@WebServiceClient(name = "MyWS", targetNamespace = "http://myws/blah", wsdlLocation = "**file:/C:/some/absolute/path/src/main/resources/META-INF/wsdl/MyWS/MyWS.wsdl"**)
强调我的
正如您希望看到的那样, wsdlLocation
属性值具有硬编码的绝对路径,在部署服务时该路径将不正确。
有什么办法可以通过将其设置为 META-INF/wsdl/MyWS/MyWS.wsdl
或其他一些值来“控制”它?
原文由 Alex 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用 Codehaus 插件是可能的:
也许您正在使用的插件有类似的选项,或者您可以考虑切换。
您还可以显式提供您的 WSDL,在这种情况下该属性将被忽略,尽管这在容器管理的应用程序中可能不合适。
_示例代码 在这里。_