sun-jaxws.xml - 从jar加载wsdl和xsds

时间:2014-03-17 04:50:54

标签: web-services wsdl jax-ws

我正在使用契约第一种方法来构建JAX-WS Web服务。客户端使用wsdlLocation属性从此SO答案 - https://stackoverflow.com/a/18323853/775467中指定的客户端jar中选择wsdl和xsd资源。

是否可以在服务器端执行相同操作。即可以在sun-jaxws.xml中使用wsdls并引用jar中的xsds

<endpoint name='TestService'
        implementation='provider.server.AddNumbersImpl'
        wsdl='WEB-INF/wsdl/Test.wsdl'
        service='{http://example.org}TestService'
        port='{http://example.org}TestServicePort'
        url-pattern='/test'/>

我知道我可以在上面的代码片段中引用WEB-INF目录中的wsdls,但我不想将wsdls和xsds打包到WAR中,但是想从部署的共享库jar中获取它们以与客户端代码选择wsdl相同的方式访问服务器。

1 个答案:

答案 0 :(得分:3)

无法更改wsdl文件的位置。 sun-jaxws.xml中的wsdl属性必须具有前缀“WEB-INF / wsdl”。否则JAX-WS生成并发布新的WSDL。如果你看一下jaxws-ri的源代码,可以在com.sun.xml.ws.transport.http.DeploymentDescriptorParser类中找到实现,方法是getPrimaryWSDL:

...
if (wsdlFile != null) {
        if (!wsdlFile.startsWith(JAXWS_WSDL_DD_DIR)) {
            logger.log(Level.WARNING, "Ignoring wrong wsdl={0}. It should start with {1}. Going to generate and publish a new WSDL.", new Object[]{wsdlFile, JAXWS_WSDL_DD_DIR});
            return null;
        }
...
}