我正在尝试使用本地存储的wsdl组来生成Java代码,以避免在运行时调用远程服务器。
我希望能够在开发机器上生成代码并在生产中运行它,因此我需要生成的代码上wsdl的路径是相对的。
使用两个插件我已设法使用相对路径或提及文件夹位置,但我无法同时获得这两个插件。
使用codehause我可以使用相对路径,但不能指向文件夹:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>1.9</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/jaxb</sourceDestDir>
<wsdlDirectory>${basedir}/wsdl</wsdlDirectory>
<wsdlLocation>../../../../../wsdl/*</wsdlLocation>
</configuration>
</execution>
</executions>
</plugin>
这是生成的服务:
try {
URL baseUrl;
baseUrl = path.to.package.BarService.class.getResource(".");
url = new URL(baseUrl, "../../../../../wsdl/*");
} catch (MalformedURLException e) {
logger.warning("Failed to create URL for the wsdl Location: '../../../../../wsdl/*', retrying as a local file");
logger.warning(e.getMessage());
}
相对路径符合预期,但wsdle名称显示为*,这会导致代码失败。
使用jax-ws-commons,我可以指向一个文件夹,但是相对路径已经消失了(我也尝试使用类路径,如注释行中所示):
<plugin>
<groupId>org.jvnet.jax-ws-commons</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.3</version>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
<configuration>
<sourceDestDir>${project.build.directory}/generated-sources/jaxb</sourceDestDir>
<wsdlDirectory>${basedir}/wsdl</wsdlDirectory>
<wsdlLocation>../../../../../wsdl/*</wsdlLocation>
<!--<wsdlLocation>classpath:wsdl/*</wsdlLocation>-->
</configuration>
</execution>
</executions>
</plugin>
这是生成的服务:
try {
url = new URL("file:/Users/username/Dev/company/project/wsdl/bar.wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
这将在我的机器上运行,但在任何其他机器上都会失败。
我希望生成的代码是:
try {
url = new URL("../../../../../wsdl/bar.wsdl");
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}