为什么Java客户端在运行时需要WSDL?

为什么Java客户端在运行时需要WSDL?,java,web-services,jakarta-ee,Java,Web Services,Jakarta Ee,为Java WS客户端生成构件后 为什么需要wsdllocation引用 为什么在运行时需要WSDL 我可能会看到一些验证的原因,但这不应该是可选的吗?摘要:虽然从设计角度来看,web服务客户端不需要WSDL,但Sun对web服务客户端影响的实现对WSDL有着严格的依赖性。明显的目的是动态生成一些运行时依赖项 第一:如果您希望生成一个可移植的客户机,那么将WSDL打包并引用它被认为是一种良好的做法 现在,撇开这一点不谈,如果实现生成了所有必需的运行时构件,那么就不需要WSDL 对于Java

为Java WS客户端生成构件后

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

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

摘要:虽然从设计角度来看,web服务客户端不需要WSDL,但Sun对web服务客户端影响的实现对WSDL有着严格的依赖性。明显的目的是动态生成一些运行时依赖项


第一:如果您希望生成一个可移植的客户机,那么将WSDL打包并引用它被认为是一种良好的做法

现在,撇开这一点不谈,如果实现生成了所有必需的运行时构件,那么就不需要WSDL

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

protected Service(java.net.URL wsdlDocumentLocation, QName serviceName)
    delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,
                                                         serviceName,
                                                         this.getClass());
}
WSDL文档被解析为
数据流;如果未提供,则默认为(提取核心要素的自由):

source=新的StreamSource(…webserviceclient.wsdlLocation()…)

并对WSServiceDelegate进行更深入的挖掘:

WSDLModelImpl wsdlmodelimpl = parseWSDL(url, source);
wsdlserviceimpl = wsdlmodelimpl.getService(serviceName);
它至少动态地创建了底层服务支持的一部分


wsdlLocation是Java实现不可或缺的一部分。

我知道最佳实践…以及如何引用本地wsdl而不是进行往返…(以便拥有一个可移植的客户端),但为什么需要它?因此我的客户端已经使用了始终生成的人工制品,但是该服务需要所有构造函数中的wsdllocation我使用java…将尝试进行更多的调试实验,以查看使用的位置我计划获取Metro代码并为此进行调试…但是您的解释非常好。谢谢