java - java jaxws Maven 插件解析相对于类位置的WSDL位置,为什么?

  显示原文与译文双语对照的内容
54 0

我正在使用 jaxws-maven-plugin 版本 2.1我发现从 jar 资源为WSDL位置生成了非常奇怪的代码:

 <configuration>
 <keep>true</keep>
 <sourceDestDir>${basedir}/src/main/java</sourceDestDir>
 <extension>true</extension>
 <wsdlDirectory>${basedir}/src/main/resources/wsdl</wsdlDirectory>
 <packageName>my.package.gen</packageName>
 <wsdlLocation>wsdl/*</wsdlLocation>
 <wsdlFiles>
 <wsdlFile>mywsdl.wsdl</wsdlFile> 
 </wsdlFiles>
 </configuration>

而生成的代码是:

static {
 URL url = null;
 try {
 URL baseUrl;
 baseUrl = my.package.gen.My_Service.class.getResource(".");
 url = new URL(baseUrl,"wsdl/mywsdl.wsdl");
 } catch (MalformedURLException e) {
 logger.warning("Failed to create URL for the wsdl Location: 'wsdl/mywsdl.wsdl', retrying as a local file");
 logger.warning(e.getMessage());
 }
 MYSERVICE_WSDL_LOCATION = url; }

所以,在目录( 软件包) 中查找wsdl文件,而不是在主 jar 目录中生成的类,而是逻辑上的。无法找到 WSDL 。

jaxws-maven-plugin 中的Bug,还是我的配置中的错误?

时间:原作者:0个回答

79 5

你应该使用jaxws-maven-plugin版本 2.3而不是 2.1,结果将像你所期望的那样。

像这样的版本 2.3的输出( 如果你的wsdl文件夹位于 src/main/resources):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");
原作者:
76 4

用于生成

url = new URL(baseUrl,"wsdl/mywsdl.wsdl");

这就是预期的行为根据这个

http://jax-ws-commons.java.net/jaxws-maven-plugin/wsimport-mojo.html#wsdlLocation

这取决于你要做什么。

如果你有什么麻烦

My_Service.class.getResource(".") ;

你可以用类似下面的东西来去除点( 相对路径):

<plugin>
 <groupId>com.google.code.maven-replacer-plugin</groupId>
 <artifactId>replacer</artifactId>
 <version>1.5.0</version>
 <executions>
 <execution>
 <phase>process-sources</phase>
 <goals>
 <goal>replace</goal>
 </goals>
 </execution>
 </executions>
 <configuration>
 <file>target/generated-sources/wsimport/lu/hitec/webservices/pssu/${wsdl.app}/${interface.name}_Service.java</file>
 <replacements>
 <replacement>
 <token>_Service.class.getResource(".")</token>
 <value>_Service.class.getResource("")</value>
 </replacement>
 </replacements>
 </configuration>
 </plugin>
原作者:
...