PHP SoapClient 解决多个namespace的问题。
来源:互联网 发布:小米5标配版网络是几g 编辑:程序博客网 时间:2024/06/05 11:40
如果使用SoapClient调用远程wsdl的方法的时候,需要写传入参数,通常是一个array, 然后调用方法名称就可以了:
$client = new SoapClient($wsUrl, array('soap_version'=>SOAP_1_2,'cache_wsdl'=>WSDL_CACHE_NONE,'exception'=>true,'trace'=>1));
$client->__soapCall(method_name, $param_array);
如果需要添加namespace, SoapClient 可以在定义的时候增加一个 ‘uri’ 的选项,如下
$client = new SoapClient($wsUrl, array('soap_version'=>SOAP_1_2,‘uri' => 'http://abc/namespace', 'cache_wsdl'=>WSDL_CACHE_NONE,'exception'=>true,'trace'=>1));
但是如果是两个以上不同的namespace, 就不好添加了。确少namespace调用soap请求时候,会报安全错误:BIP3113E: Exception detected in message flow...
解决办法是继承SoapClient类,重载其__doRequest 方法,修改方法的传入参数$request, 添加缺失的namespace,然后调用就可以成功了。
附加例子:
class MySoapClient extends SoapClient{
function __doRequest($request, $location, $action, $version, $one_way=0){
$newRequest = $request;
$newRequest = str_replace('xmlns:ns1="http://abc.com"', 'xmlns:ns1="http://abc.com" xmlns:web1="http://csdn.com"', $newRequest);
$newRequest = str_replace('<Location>', '<web1:Location>', $newRequest);
$newRequest = str_replace('</Location>', '</web1:Location>', $newRequest);
return parent::__doRequest($newRequest, $location, $action, $version);
}
}
在这个例子中添加了一个namespace web1, 记得一定要把相应的标签也添加此web1和:,修补请求xml格式,使其满足规范。
调用成功!
如果你有更好的办法,欢迎讨论。
- PHP SoapClient 解决多个namespace的问题。
- php soapclient的使用
- php 中soapclient的使用
- php-soapClient
- PHP 5.3.8 的 SoapClient 无法工作
- php第一个解决的问题
- 使用PHP SoapClient 处理自建证书的https服务
- php SoapClient类的学习与简单实例
- PHP namespace的定义
- php namespace的使用方法
- The type or namespace name 'Zhaopin' does not exist in the namespace 'LMSoft' 问题的解决
- 利用匿名namespace解决C++中重复定义的问题
- 利用匿名namespace解决C++中重复定义的问题
- php——SoapClient实例
- php利用SoapClient调用webservices
- PHP调用webservice soap soapclient
- PHP:成功解决表单接收多个数组变量的问题
- soapclient
- Oracle执行计划
- win7中如何解决“该项不适用于在指定状态下使用”
- PHP GB库
- org.json XML和Json互转
- Android的适配问题
- PHP SoapClient 解决多个namespace的问题。
- 享元模式
- 72MainActivity中群聊的监听
- hdu 1257 最少拦截系统 (贪心)
- 注意了!预计2015年将有8大投资陷阱。
- Segmentation Fault in Linux 原因与避免
- [问题]Warning: xctool-0.2.2 already installed, it's just not linked
- UML序列图
- 编程中数据是内存中的01