我有以下问题:
当我向 SoapClient 对象传递一个使用相对路径导入架构的 wsdl 时,它的实例化失败。 (无论如何,根据我的研究,我相信情况确实如此)
我的代码如下:
$wsdl = 'http://myproxy/webservice?wsdl';
$options = array( /* options */ );
$client = new SoapClient($wsdl, $options);
wsdl 的架构导入部分:
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<import namespace="http://myprovider/namespace1/namespace1" schemaLocation="schema1.xsd"/>
<import namespace="http://myprovider/namespace1/namespace2" schemaLocation="schema2.xsd"/>
<import namespace="http://myprovider/namespace1/namespace3" schemaLocation="schema3.xsd"/>
</schema>
我得到的错误:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://myproxy/webservice?wsdl' : Extra content at the end of the document
研究让我看到了这样的文章:
https://issues.apache.org/jira/browse/AXIS2-484
据我所知,我似乎有两个选择:
- 让我的提供商将架构路径更改为绝对路径
- 让我的提供商给我一份架构副本,以便我可以在我的服务器上托管
SoapClient
正在呼叫来自
正如我所怀疑的那样。
模式的相对路径意味着 SoapClient 在解析 wsdl 时,将尝试使用代理作为参考来访问模式文件,如下所示:
http://myproxy/schema1.xsd
由于我没有 xsd 文件,这将导致 SoapClient 抛出错误。
那么解决这个问题的办法就是消除代理,这样外部资源的相对路径就不会受到影响。解决方案可以在这里找到:
扩展 php SoapClient 以进行 siteminder 身份验证
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)