我有一个类似于此的 WSDL:
https://provider.web-service.domain/path/ServiceName?wsdl
它有这样一行:
<wsdl:import namespace="http://name/space/service/" location="ServiceName.wsdl"></wsdl:import>
IE。它正在尝试在该位置导入另一个 wsdl:
https://provider.web-service.domain/path/ServiceName.wsdl
因此,在初始化 SoapClient 时,出现以下错误:
PHP Fatal error: SOAP-ERROR: Parsing WSDL:
Couldn't load from 'https://provider.web-service.domain/path/ServiceName.wsdl' :
failed to load external entity "https://provider.web-service.domain/path/ServiceName.wsdl"
我目前正在尝试通过我的 WSDL 提供程序解决此问题,但是否有解决此问题的方法?
我猜唯一的解决办法是让他们提供一条实际指向可访问资源的路径。事实上,我对此无能为力。
你的意见。
有关的:
更新
提供商说 PHP SOAP Client SUX(本质上)。
更改标题:
- php SoapClient:无法从外部实体加载;至
- php SoapClient:无法从外部实体加载(端点解析到另一个位置)
因此 PHP SoapClient 不知道 wsdl 的 url 正在解析到另一个位置,因此它会尝试从原始位置导入文件。
由于资源在原始位置不存在,因此会引发错误。
作为一种解决方法,他们提供了 WSDL,因此我们可以将其放在我们的服务器上。
但这个问题需要更好的解决方案。
更新 2
为了清楚起见,我想改写这个问题:
我被要求使用以下 WSDL URL:
[1] https://provider.web-service.domain/path/ServiceName?wsdl
以下位置有两个 WSDL
[2] https://provider.web-service.domain/path/ServiceName/another/diff/path/prefix_ServiceName.wsdl
[3] https://provider.web-service.domain/path/ServiceName/another/diff/path/ServiceName.wsdl
- [1] 解析为 [2];然后
- [2] 进口 [3]
当将 [1] 传递给 SoapClient() 时,它是致命的(如前所述)
将 [2] 传递给 SoapClient() 时,它可以工作。