首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用jaxws-maven-plugin控制JAX-WS wsdlLocation属性值的绝对路径

用jaxws-maven-plugin控制JAX-WS wsdlLocation属性值的绝对路径
EN

Stack Overflow用户
提问于 2012-03-21 10:16:35
回答 5查看 37.9K关注 0票数 26

我有一个JAX驱动的web服务,它的WSDL我们从另一个Maven模块(我称之为ws-consumer)中生成一个web服务客户端。

不管是好是坏,我们将“已发布的WSDL”(发布时服务持有/生成的WSDL和XSD版本)复制到ws-consumerws-consumer文件夹中,然后使用org.jvnet中的jaxws-maven-plugin生成具有以下(截断)配置的jaxws:wsimport客户端:

代码语言:javascript
复制
    <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>

现在,生成的客户端代码在类级别上应用了以下注释:

代码语言:javascript
复制
@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或其他值来“控制”它呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-21 12:05:27

使用Codehaus插件是可能的:

代码语言:javascript
复制
<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,在这种情况下,这个属性将被忽略,尽管这在容器管理的应用程序中可能不合适。

示例代码http://illegalargumentexception.blogspot.co.uk/2011/04/java-jax-ws-web-services-and-clients.html#ws_code

票数 16
EN

Stack Overflow用户

发布于 2014-01-09 19:25:51

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

代码语言:javascript
复制
<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>
票数 12
EN

Stack Overflow用户

发布于 2017-07-26 07:41:39

我投票赞成@dean的回答,因为它适合于org.jvnet.jax-ws-commons:jaxws-maven-plugin插件的情况。

在本地显示CLI的帮助可能也很有趣,如下所示:

代码语言:javascript
复制
mvn jaxws:help -Dgoal=wsimport -Ddetail

正如前面的答案所述,我们可以使用wsdlLocation参数,如下所述:

代码语言:javascript
复制
wsdlLocation
  @WebService.wsdlLocation and @WebServiceClient.wsdlLocation value.
  Can end with asterisk in which case relative path of the WSDL will be
  appended to the given wsdlLocation.

  Example:

   ...
   <configuration>
   <wsdlDirectory>src/mywsdls</wsdlDirectory>
   <wsdlFiles>
   <wsdlFile>a.wsdl</wsdlFile>
   <wsdlFile>b/b.wsdl</wsdlFile>
   <wsdlFile>${basedir}/src/mywsdls/c.wsdl</wsdlFile>
   </wsdlFiles>
   <wsdlLocation>http://example.com/mywebservices/*</wsdlLocation>
   </configuration>
   ...
  wsdlLocation for a.wsdl will be http://example.com/mywebservices/a.wsdl
  wsdlLocation for b/b.wsdl will be
  http://example.com/mywebservices/b/b.wsdl
  wsdlLocation for ${basedir}/src/mywsdls/c.wsdl will be
  file://absolute/path/to/c.wsdl


  Note: External binding files cannot be used if asterisk notation is in
  place.

JDK中的wsimport命令也记录了-wsdllocation选项:

但它只是说(请参阅@WebServiceClient javadoc):

代码语言:javascript
复制
Specifies the @WebServiceClient.wsdlLocation value.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9802487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档