jaxws-maven-plugin解析相对于类位置的WSDL位置,为什么?

Dan*_*lor 6 java wsdl jax-ws maven-plugin maven

我正在使用该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>
Run Code Online (Sandbox Code Playgroud)

生成的代码是:

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; }
Run Code Online (Sandbox Code Playgroud)

所以wsdl文件在目录(包)中查找生成的类居民,而不是在主jar目录中,因为这是合乎逻辑的.并且无法找到WSDL.

它是一个错误jaxws-maven-plugin,还是我配置中的错误?

Mik*_*van 2

您应该使用 jaxws-maven-plugin 版本 2.3 而不是 2.1,结果将如您所料。

2.3 版本的输出如下(如果您的 wsdl 文件夹位于 src/main/resources 下):

URL url = <Any>.class.getClassLoader().getResource("wsdl/anywsdl.wsdl");
Run Code Online (Sandbox Code Playgroud)