通过nusoap学习soap知识的一些体会(续)

通过nusoap学习soap知识的一些浅薄体会中,我提到网上提供的一种让nusoap使用复合数据的方法,以前测试未通过,今天闲来无事,又仔细看了下nusoap的源码,终于实现返回复杂数组类型,基本能满足绝大多数需求了
重点代码,其他内容可参考前一篇文章:通过nusoap学习soap知识的一些浅薄体会
$server->wsdl->addComplexType(
    'Account', //数据类型名称
    'complexType', //数据类型目前支持complexType|simpleType|attribute几种 ,后两者尚未研究,
    'array', //phpType,字面意思应该是php基本类型,源码提到支持array和struct
    'all',//排序方法,支持all|sequence|choice,但是我看不到有什么效果 
    '',//命名空间,留空即可
    array(
        'UserName'=>array('name'=>'UserName', 'type'=>'xsd:string'),
        'Pass'=>array('pass'=>'Pass', 'type'=>'xsd:string')
        ),
  ''// 属性,貌似是指定特定schemas站定义好的类型,留空即可
    );
 
 $server->register ( 'hellow', $paras2 , array("return" => "tns:Account")    )  ;
这地方的关键方法是 $server->wsdl->addComplexType,为服务端添加自定义类型,Account为这个数据类型的名称,类似于array 或者int啥的 
complexType是混合类型,应该是能支持的最复杂的数据类型 了,php基本类型,源码说的不是很明确,我猜是指明我们定义的这个类型属于php中哪个基本类型,支持数组和struct,但是关于php对struct支持的资料我在百度也没找到几篇,就不管了,反正array能满足几乎所有需求了.排序和命名空间貌似没啥用处,倒是最后个参数,给定一个数组,数组只可以指明某个特定schemas文件中已经定义的好的数组类型,我没测试,我猜想第二个参数指定的simpleType即对应参数三里面指定的类型,而第二个参数中的attributes即对应最后一个atts参数里面指定的特定schemas中定义好的数据类型.这个类型可以这样使用
array(
) 
 
 
array(
        'UserName'=>array('name'=>'UserName', 'type'=>'xsd:string'),
        'Pass'=>array('pass'=>'Pass', 'type'=>'xsd:string')
        ),这是定义返回数组的参数,但是实际使用中我发现,这个参数可以留空,完整的写法这样就可以:
重点代码,其他内容可参考前一篇文章http://user.qzone.qq.com/57725649/blog/1403610793
$server->wsdl->addComplexType(
    'Account', 
    'complexType', 
    'array', 
    'all',
    '',
   '',
  ''
    );
  
 
 $server->register ( 'hellow', $paras2 , array("return" => "tns:Account")    )  ;这行代码中红色部分表示自定义类型,类型名称即前面定义好的Account.xsd是默认的基本数据类型
然后再注册的服务端方法hellow中就可以返回数组了
如:
 function hellow()
{
 return array('Account'=>array('name'=>$name,'Pass'=>$pass,'message'=>array('s'=>'33','d'=>'44')));






  • 作者:admin
  • 时间:2014-07-14
  • 评论: 5条
  • Tag:nusoap.soap,php
  • 浏览:4802