使用 jaxws-maven-plugin 控制 JAX-WS wsdlLocation 属性值(绝对路径)

新手上路,请多包涵

我有一个 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 许可协议

阅读 625
2 个回答

使用 Codehaus 插件是可能的:

 <plugin>
   <groupId>org.codehaus.mojo</groupId>
   <artifactId>jaxws-maven-plugin</artifactId>
   <version>1.9</version>
   <executions>
     <execution>
       <goals>
         <goal>wsimport</goal>
       </goals>
     </execution>
   </executions>
   <configuration>
     <keep>true</keep>
     <verbose>true</verbose>
     <wsdlDirectory>../wscontract/src/main/resources/wsdl</wsdlDirectory>
     <wsdlLocation>wsdl/MaintainAddress.wsdl</wsdlLocation>
     <sourceDestDir>src/main/java</sourceDestDir>
     <bindingDirectory>.</bindingDirectory>
     <bindingFiles>
       <bindingFile>jaxb/xsdbindings.xml</bindingFile>
       <bindingFile>jaxb/wsdlbindings.xml</bindingFile>
     </bindingFiles>
   </configuration>
</plugin>

也许您正在使用的插件有类似的选项,或者您可以考虑切换。

您还可以显式提供您的 WSDL,在这种情况下该属性将被忽略,尽管这在容器管理的应用程序中可能不合适。

_示例代码 在这里。_

原文由 McDowell 发布,翻译遵循 CC BY-SA 3.0 许可协议

wsdlLocation 与来自 org.jvnet.jax-ws-commons 的 jaxws-maven-plugin 一起使用:

 <plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
    <execution>
        <goals>
            <goal>wsimport</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <wsdlDirectory>src/main/resources/wsdl</wsdlDirectory>
    <wsdlFiles>
        <wsdlFile>arsdev.wsdl</wsdlFile>
    </wsdlFiles>
    <wsdlLocation>wsdl/*</wsdlLocation>
    <!-- Keep generated files -->
    <keep>true</keep>
    <packageName>jaxws.remedy.client.generated</packageName>
    <!-- generated source files destination -->
    <sourceDestDir>target/generated-code/src</sourceDestDir>
</configuration>
</plugin>

原文由 Dean Schulze 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题