php – 如何将nuSOAP用于具有多个名称空间的消息
发布时间:2020-12-13 14:13:39 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用nuSOAP访问WebService(因为我在这里绑定了 PHP4),它在消息中使用了多个命名空间.那可能吗? 示例请求消息如下所示: soapenv:Envelope ... xmlns:ns1="http://domain.tld/namespace1" xmlns:ns2="http://domain.tld/namespace2" soapenv:Heade
我正在尝试使用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>"; 仍然不是一个非常好的解决方案,但它的工作原理:-) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |