为什么Java Client在运行时需要WSDL?
在为Java WS客户端生成工件之后,
- 为什么需要wsdllocation引用?
- 为什么运行时需要WSDL?
我可能会看到一些validation的原因,但不应该是可选的吗?
简介:从设计的角度来看,Web服务客户端不需要WSDL,因此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
数据流; 如果没有提供,它默认为(自由提取核心本质):
source = new StreamSource(… webserviceclient.wsdlLocation()…);
并深入挖掘WSServiceDelegate:
WSDLModelImpl wsdlmodelimpl = parseWSDL(url, source); wsdlserviceimpl = wsdlmodelimpl.getService(serviceName);
它动态地创建了底层服务支持的至少一部分。
wsdlLocation是Java实现的组成部分。