我有一个JAX驱动的web服务,它的WSDL我们从另一个Maven模块(我称之为ws-consumer)中生成一个web服务客户端。
不管是好是坏,我们将“已发布的WSDL”(发布时服务持有/生成的WSDL和XSD版本)复制到ws-consumer的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或其他值来“控制”它呢?
发布于 2012-03-21 12:05:27
使用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,在这种情况下,这个属性将被忽略,尽管这在容器管理的应用程序中可能不合适。
示例代码http://illegalargumentexception.blogspot.co.uk/2011/04/java-jax-ws-web-services-and-clients.html#ws_code。
发布于 2014-01-09 19:25:51
将wsdlLocation与org.jvnet.jax-ws-plugin中的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>发布于 2017-07-26 07:41:39
我投票赞成@dean的回答,因为它适合于org.jvnet.jax-ws-commons:jaxws-maven-plugin插件的情况。
在本地显示CLI的帮助可能也很有趣,如下所示:
mvn jaxws:help -Dgoal=wsimport -Ddetail正如前面的答案所述,我们可以使用wsdlLocation参数,如下所述:
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):
Specifies the @WebServiceClient.wsdlLocation value.https://stackoverflow.com/questions/9802487
复制相似问题