包 | system.web.services |
---|---|
继承 | class CWsdlGenerator » CComponent |
源自 | 1.0 |
版本 | $Id: CWsdlGenerator.php 2799 2011-01-01 19:31:13Z qiang.xue $ |
源码 |
CWsdlGenerator是一个给定的服务类生成WSDL。
WSDL的生成是基于服务类文件中的文档注释。 特别是,它认识注释的‘@soap’标记it,并提取物API 方法和类型定义。
在服务类中,一个远程调用的方法必须是公共方法与doc 注释块包含‘@soap’标记。在文档注释,类型和名称 每一个输入参数和返回值的类型应使用 标准phpdoc格式。
CWsdlGenerator识别以下的原始类型(区分大小写) 参数和返回类型声明:
如果类型不是一个原始类型,它被认为是一个类类型, CWsdlGenerator将寻找其属性声明。只考虑公共属性, 它们各自关联到包含着‘@soap’标签的 doc注释块。doc注释块应该声明属性的类型。
CWsdlGenerator识别以下格式的数组类型:
下面是声明一个远程调用方法的示例:
以下是声明一个类与远程访问的属性的例子:
WSDL的生成是基于服务类文件中的文档注释。 特别是,它认识注释的‘@soap’标记it,并提取物API 方法和类型定义。
在服务类中,一个远程调用的方法必须是公共方法与doc 注释块包含‘@soap’标记。在文档注释,类型和名称 每一个输入参数和返回值的类型应使用 标准phpdoc格式。
CWsdlGenerator识别以下的原始类型(区分大小写) 参数和返回类型声明:
- str/string:对应于xsd:string;
- int/integer:对应于xsd:int;
- float/double:对应于xsd:float;
- bool/boolean:对应于xsd:boolean;
- date:对应于xsd:date;
- time:对应于xsd:time;
- datetime:对应于xsd:dateTime;
- array:对应于xsd:string;
- object:对应于xsd:struct;
- mixed:对应于xsd:anyType。
如果类型不是一个原始类型,它被认为是一个类类型, CWsdlGenerator将寻找其属性声明。只考虑公共属性, 它们各自关联到包含着‘@soap’标签的 doc注释块。doc注释块应该声明属性的类型。
CWsdlGenerator识别以下格式的数组类型:
typeName[]:对应于tns:typeNameArray
下面是声明一个远程调用方法的示例:
/ ** * foo方法。 * @param string 名字 * @param string 值 * @return string[] 一些数组 * @soap * / public function foo($name,$value) {...}
以下是声明一个类与远程访问的属性的例子:
class Foo { / ** * @var string name of foo * @soap * / public $name; / ** * @var Member[] members of foo * @soap * / public $members; }上面的‘members’属性是‘Member’对象的数组。由于‘Member’不是一个原始类型, CWsdlGenerator会重复查找,找出‘Member’的定义。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
namespace | string | 用来生成WSDL的命名空间。 如果不设置, 默认为是生成的WSDL的类的名字。 | CWsdlGenerator |
serviceName | string | 生成的WSDL的名字。 如果不设置,默认为”urn:{$className}wsdl“。 | CWsdlGenerator |
公共方法
属性详细
namespace
属性
public string $namespace;
用来生成WSDL的命名空间。 如果不设置, 默认为是生成的WSDL的类的名字。
serviceName
属性
public string $serviceName;
生成的WSDL的名字。 如果不设置,默认为”urn:{$className}wsdl“。
方法详细
generateWsdl()
方法
public string generateWsdl(string $className, string $serviceUrl, string $encoding='UTF-8')
| ||
$className | string | 类名字。 |
$serviceUrl | string | Web service的URL |
$encoding | string | WSDL的编码。默认为‘UTF-8’。 |
{return} | string | 生成的WSDL |
public function generateWsdl($className, $serviceUrl, $encoding='UTF-8')
{
$this->_operations=array();
$this->_types=array();
$this->_messages=array();
if($this->serviceName===null)
$this->serviceName=$className;
if($this->namespace===null)
$this->namespace="urn:{$className}wsdl";
$reflection=new ReflectionClass($className);
foreach($reflection->getMethods() as $method)
{
if($method->isPublic())
$this->processMethod($method);
}
return $this->buildDOM($serviceUrl,$encoding)->saveXML();
}
为指定的类生成WSDL。