php – 如何将nuSOAP用于具有多个名称空间的消息

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何将nuSOAP用于具有多个名称空间的消息脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用nuSOAP访问WebService(因为我在这里绑定了 PHP4),它在消息中使用了多个命名空间.那可能吗?

示例请求消息如下所示:

<soapenv:EnveloPE ...
  XMlns:ns1="http://domain.tld/namespace1"
  xMLns:ns2="http://domain.tld/namespace2">
  <soapenv:Header/>
  <soapenv:Body>
    <ns1:myoperation>
      <ns2:Person>
        <ns2:Firstname>..</ns2:Firstname>
        ..
      </ns2:Person>
      <ns1:Attribute>..</ns1:Attribute>
    </ns1:myOperation>
  </soapenv:Body>
</soapenv:Envelope>

我试着跟随:

$client = new nusoap_client("my.wsdl",true);
$params = array(
  'Person' => array(
    'FirstName'  => 'Thomas',..
   ),'Attribute' => 'foo'
 );

 $result = $client->call('myOperation',$params,'','soapAction');

希望nuSOAP尝试将这些名称与正确的名称空间和节点相匹配.然后我尝试使用soapval()来生成元素及其命名空间 – 但是如果我调用一个操作,nuSOAP会创建以下请求:

<SOAP-ENV:Envelope ...>
  <SOAP-ENV:Body>
    <queryCCApplicationDataRequest xmlns="http://domain.tld/namespace1"/>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

因此在“匹配”阶段出现问题.

在尝试匹配之后,我发现了两种可能的解决方案:

1)不要使用WSDL创建nusoap_client和soapval()来创建消息
这样做的缺点是消息包含大量开销(命名空间在每个元素中定义).不太好.

2)不是依赖于参数的匹配,而是在xml中构造你的回复并将前缀的所有定义放在第一个元素中 – 例如

$params = "<ns1:myOperation xmlns:ns1="..." xmlns:ns2="...">
      <ns2:Person>
        <ns2:Firstname>..</ns2:Firstname>
        ..
      </ns2:Person>
      <ns1:Attribute>..</ns1:Attribute>
    </ns1:myOperation>";

仍然不是一个非常好的解决方案,但它的工作原理:-)

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何将nuSOAP用于具有多个名称空间的消息全部内容,希望文章能够帮你解决php – 如何将nuSOAP用于具有多个名称空间的消息所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。