为什么Java Client在运行时需要WSDL?

Cri*_*ris 5 java web-services java-ee

在为Java WS客户端生成工件之后,

  • 为什么需要wsdllocation引用?
  • 为什么运行时需要WSDL?

我可能会看到一些验证的原因,但不应该是可选的吗?

Ric*_*tze 5

简介:尽管从设计的角度来看,WSDL对于Web服务客户端不是必需的,但是Sun为Web服务客户端实现的实现对WSDL有着严格的依赖性。明显的目的是动态生成一些运行时依赖项。


首先:如果您希望产生一个可移植的客户端,则打包并引用WSDL被认为是一个好习惯。

现在,除此以外,如果实现生成了所有必需的运行时构件,则不需要WSDL。

对于Java,wsimport工具会生成一些静态构件(接口以及可能的支持代码,以满足性能目标),并在运行时动态创建其他元素。从一开始,我们就看到WSDL文档在Service构造函数中占据主要位置:

protected Service(java.net.URL wsdlDocumentLocation, QName serviceName)
    delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
                                                         serviceName,
                                                         this.getClass());
}
Run Code Online (Sandbox Code Playgroud)

WSDL文档被解析为source数据流;如果未提供,则默认为(提取核心本质所采取的自由):

源=新的StreamSource(... webserviceclient.wsdlLocation()...);

并深入研究WSServiceDelegate:

WSDLModelImpl wsdlmodelimpl = parseWSDL(url, source);
wsdlserviceimpl = wsdlmodelimpl.getService(serviceName);
Run Code Online (Sandbox Code Playgroud)

它正在动态创建至少一部分基础服务支持。

wsdlLocation是Java实现不可或缺的。