传递带有相对路径模式的wsdl时,php SoapClient失败

时间:2011-05-26 00:28:43

标签: php import wsdl external soap-client

我有以下问题:

当我向其传递使用相对路径导入模式的wsdl时,我的SoapClient对象的实例化失败。 (无论如何,根据我的研究,我认为情况就是这样)

我的代码如下:

$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来自

1 个答案:

答案 0 :(得分:1)

正如我所怀疑的那样。

模式的相对路径意味着SoapClient在解析wsdl时会尝试使用代理作为参考来访问模式文件,如下所示:

http://myproxy/schema1.xsd

由于我没有xsd文件,这会导致SoapClient抛出错误。

此问题的解决方案是消除代理,以便不影响外部资源的相对路径。溶剂可以在这里找到:

Extending php SoapClient for siteminder authentication