简介: 虽然从设计角度来看,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());
}
WSDL 文档被解析为source
数据流;如果没有提供,则默认为(自由提取核心本质):
源 = new StreamSource( ... webserviceclient.wsdlLocation() ... );
并深入挖掘 WSServiceDelegate:
WSDLModelImpl wsdlmodelimpl = parseWSDL(url, source);
wsdlserviceimpl = wsdlmodelimpl.getService(serviceName);
它至少动态创建部分底层服务支持。
wsdlLocation 是 Java 实现不可或缺的一部分。