如何设置JAX-WS的wsdlLocation以指向具有相对路径的目录?

时间:2014-03-06 17:04:35

标签: java web-services maven wsdl jax-ws

我正在尝试使用本地存储的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);
    }

0 个答案:

没有答案