⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsdl.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
<?php/** * This file contains the code for dealing with WSDL access and services. * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 2.02 of the PHP license, * that is bundled with this package in the file LICENSE, and is available at * through the world-wide-web at http://www.php.net/license/2_02.txt.  If you * did not receive a copy of the PHP license and are unable to obtain it * through the world-wide-web, please send a note to license@php.net so we can * mail you a copy immediately. * * @category   Web Services * @package    SOAP * @author     Dietrich Ayala <dietrich@ganx4.com> Original Author * @author     Shane Caraveo <Shane@Caraveo.com>   Port to PEAR and more * @author     Chuck Hagenbuch <chuck@horde.org>   Maintenance * @author     Jan Schneider <jan@horde.org>       Maintenance * @copyright  2003-2005 The PHP Group * @license    http://www.php.net/license/2_02.txt  PHP License 2.02 * @link       http://pear.php.net/package/SOAP */require_once 'SOAP/Base.php';require_once 'SOAP/Fault.php';require_once 'HTTP/Request.php';define('WSDL_CACHE_MAX_AGE', 43200);define('WSDL_CACHE_USE',     0); // set to zero to turn off caching/** * This class parses WSDL files, and can be used by SOAP::Client to properly * register soap values for services. * * Originally based on SOAPx4 by Dietrich Ayala * http://dietrich.ganx4.com/soapx4 * * @todo * - add wsdl caching * - refactor namespace handling ($namespace/$ns) * - implement IDL type syntax declaration so we can generate WSDL * * @access public * @package SOAP * @author Shane Caraveo <shane@php.net> Conversion to PEAR and updates * @author Dietrich Ayala <dietrich@ganx4.com> Original Author */class SOAP_WSDL extends SOAP_Base{    var $tns = null;    var $definition = array();    var $namespaces = array();    var $ns = array();    var $xsd = SOAP_XML_SCHEMA_VERSION;    var $complexTypes = array();    var $elements = array();    var $messages = array();    var $portTypes = array();    var $bindings = array();    var $imports = array();    var $services = array();    var $service = '';    var $uri = '';    var $docs = false;    /**     * Proxy parameters     *     * @var array     */    var $proxy = null;    var $trace = 0;    /**     * Use WSDL cache.     *     * @var boolean     */    var $cacheUse = null;    /**     * Cache max lifetime (in seconds).     *     * @var integer     */    var $cacheMaxAge = null;    /**     * Class to use for WSDL parsing. Can be overridden for special cases,     * subclasses, etc.     *     * @var string     */    var $wsdlParserClass = 'SOAP_WSDL_Parser';    /**     * SOAP_WSDL constructor.     *     * @param string  $wsdl_uri     URL to WSDL file.     * @param array   $proxy        Contains options for HTTP_Request class     *                              @see HTTP_Request.     * @param boolean $cacheUse     Use WSDL caching. Defaults to false.     * @param integer $cacheMaxAge  Cache max lifetime (in seconds).     * @param boolean $docs         Parse documentation in the WSDL? Defaults     *                              to false.     *     * @access public     */    function SOAP_WSDL($wsdl_uri    = false,                       $proxy       = array(),                       $cacheUse    = WSDL_CACHE_USE,                       $cacheMaxAge = WSDL_CACHE_MAX_AGE,                       $docs        = false)    {        parent::SOAP_Base('WSDL');        $this->uri         = $wsdl_uri;        $this->proxy       = $proxy;        $this->cacheUse    = $cacheUse;        $this->cacheMaxAge = $cacheMaxAge;        $this->docs        = $docs;        if ($wsdl_uri) {            if (!PEAR::isError($this->parseURL($wsdl_uri))) {                reset($this->services);                $this->service = key($this->services);            }        }    }    function set_service($service)    {        if (array_key_exists($service, $this->services)) {            $this->service = $service;        }    }    /**     * @deprecated use parseURL instead     */    function parse($wsdl_uri, $proxy = array())    {        $this->parseURL($wsdl_uri, $proxy);    }    /**     * Fills the WSDL array tree with data from a WSDL file.     *     * @param string $wsdl_uri  URL to WSDL file.     * @param array $proxy      Contains options for HTTP_Request class     *                          @see HTTP_Request.     */    function parseURL($wsdl_uri, $proxy = array())    {        $parser =& new $this->wsdlParserClass($wsdl_uri, $this, $this->docs);        if ($parser->fault) {            $this->_raiseSoapFault($parser->fault);        }    }    /**     * Fills the WSDL array tree with data from one or more PHP class objects.     *     * @param mixed $wsdl_obj          An object or array of objects to add to     *                                 the internal WSDL tree.     * @param string $targetNamespace  The target namespace of schema types     *                                 etc.     * @param string $service_name     Name of the WSDL service.     * @param string $service_desc     Optional description of the WSDL     *                                 service.     */    function parseObject(&$wsdl_obj, $targetNamespace, $service_name,                         $service_desc = '')    {        $parser =& new SOAP_WSDL_ObjectParser($wsdl_obj, $this,                                              $targetNamespace, $service_name,                                              $service_desc);         if ($parser->fault) {             $this->_raiseSoapFault($parser->fault);         }    }    function getEndpoint($portName)    {        if ($this->__isfault()) {            return $this->__getfault();        }        return (isset($this->services[$this->service]['ports'][$portName]['address']['location']))                ? $this->services[$this->service]['ports'][$portName]['address']['location']                : $this->_raiseSoapFault("No endpoint for port for $portName", $this->uri);    }    function _getPortName($operation, $service)    {        if (isset($this->services[$service]['ports'])) {            $ports = $this->services[$service]['ports'];            foreach ($ports as $port => $portAttrs) {                $type = $ports[$port]['type'];                if ($type == 'soap' &&                    isset($this->bindings[$portAttrs['binding']]['operations'][$operation])) {                    return $port;                }            }        }        return null;    }    /**     * Finds the name of the first port that contains an operation of name     * $operation. Always returns a SOAP portName.     */    function getPortName($operation, $service = null)    {        if ($this->__isfault()) {            return $this->__getfault();        }        if (!$service) {            $service = $this->service;        }        if (isset($this->services[$service]['ports'])) {            if ($portName = $this->_getPortName($operation, $service)) {                return $portName;            }        }        // Try any service in the WSDL.        foreach ($this->services as $serviceName => $service) {            if (isset($this->services[$serviceName]['ports'])) {                if ($portName = $this->_getPortName($operation, $serviceName)) {                    $this->service = $serviceName;                    return $portName;                }            }        }        return $this->_raiseSoapFault("No operation $operation in WSDL.", $this->uri);    }    function getOperationData($portName, $operation)    {        if ($this->__isfault()) {            return $this->__getfault();        }        if (!isset($this->services[$this->service]['ports'][$portName]['binding']) ||            !($binding = $this->services[$this->service]['ports'][$portName]['binding'])) {            return $this->_raiseSoapFault("No binding for port $portName in WSDL.", $this->uri);        }        // Get operation data from binding.        if (is_array($this->bindings[$binding]['operations'][$operation])) {            $opData = $this->bindings[$binding]['operations'][$operation];        }        // get operation data from porttype        $portType = $this->bindings[$binding]['type'];        if (!$portType) {            return $this->_raiseSoapFault("No port type for binding $binding in WSDL.", $this->uri);        }        if (is_array($type = $this->portTypes[$portType][$operation])) {            if (isset($type['parameterOrder'])) {                $opData['parameterOrder'] = $type['parameterOrder'];            }            $opData['input'] = array_merge($opData['input'], $type['input']);            $opData['output'] = array_merge($opData['output'], $type['output']);        }        if (!$opData)            return $this->_raiseSoapFault("No operation $operation for port $portName in WSDL.", $this->uri);        $opData['parameters'] = false;        if (isset($this->bindings[$binding]['operations'][$operation]['input']['namespace']))            $opData['namespace'] = $this->bindings[$binding]['operations'][$operation]['input']['namespace'];        // Message data from messages.        $inputMsg = $opData['input']['message'];        if (is_array($this->messages[$inputMsg])) {            foreach ($this->messages[$inputMsg] as $pname => $pattrs) {                if ($opData['style'] == 'document' &&                    $opData['input']['use'] == 'literal' &&                    $pname == 'parameters') {                    $opData['parameters'] = true;                    $opData['namespace'] = $this->namespaces[$pattrs['namespace']];                    $el = $this->elements[$pattrs['namespace']][$pattrs['type']];                    if (isset($el['elements'])) {                        foreach ($el['elements'] as $elname => $elattrs) {                            $opData['input']['parts'][$elname] = $elattrs;                        }                    }                } else {                    $opData['input']['parts'][$pname] = $pattrs;                }            }        }        $outputMsg = $opData['output']['message'];        if (is_array($this->messages[$outputMsg])) {            foreach ($this->messages[$outputMsg] as $pname => $pattrs) {                if ($opData['style'] == 'document' &&                    $opData['output']['use'] == 'literal' &&                    $pname == 'parameters') {                    $el = $this->elements[$pattrs['namespace']][$pattrs['type']];                    if (isset($el['elements'])) {                        foreach ($el['elements'] as $elname => $elattrs) {                            $opData['output']['parts'][$elname] = $elattrs;                        }                    }                } else {                    $opData['output']['parts'][$pname] = $pattrs;                }            }        }        return $opData;    }    function matchMethod(&$operation)    {        if ($this->__isfault()) {            return $this->__getfault();        }        // Overloading lowercases function names :(        foreach ($this->services[$this->service]['ports'] as $port => $portAttrs) {            foreach (array_keys($this->bindings[$portAttrs['binding']]['operations']) as $op) {                if (strcasecmp($op, $operation) == 0) {                    $operation = $op;                }            }        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -