Minahito
minah****@users*****
2006年 11月 7日 (火) 17:04:37 JST
Index: xoops2jp/html/modules/base/lib/ShadeSoap/NusoapServer.class.php diff -u xoops2jp/html/modules/base/lib/ShadeSoap/NusoapServer.class.php:1.1.2.2 xoops2jp/html/modules/base/lib/ShadeSoap/NusoapServer.class.php:removed --- xoops2jp/html/modules/base/lib/ShadeSoap/NusoapServer.class.php:1.1.2.2 Fri Sep 1 12:13:10 2006 +++ xoops2jp/html/modules/base/lib/ShadeSoap/NusoapServer.class.php Tue Nov 7 17:04:37 2006 @@ -1,150 +0,0 @@ -<?php -/** - * @package ShadeSoap - * @version $Id: NusoapServer.class.php,v 1.1.2.2 2006/09/01 03:13:10 minahito Exp $ - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -if (!class_exists('soap_server')) exit(); - -class ShadeSoap_NusoapServer extends soap_server -{ - function invoke_method() { - $this->debug('in invoke_method, methodname=' . $this->methodname . ' methodURI=' . $this->methodURI . ' SOAPAction=' . $this->SOAPAction); - - if ($this->wsdl) { - if ($this->opData = $this->wsdl->getOperationData($this->methodname)) { - $this->debug('in invoke_method, found WSDL operation=' . $this->methodname); - $this->appendDebug('opData=' . $this->varDump($this->opData)); - } elseif ($this->opData = $this->wsdl->getOperationDataForSoapAction($this->SOAPAction)) { - // Note: hopefully this case will only be used for doc/lit, since rpc services should have wrapper element - $this->debug('in invoke_method, found WSDL soapAction=' . $this->SOAPAction . ' for operation=' . $this->opData['name']); - $this->appendDebug('opData=' . $this->varDump($this->opData)); - $this->methodname = $this->opData['name']; - } else { - $this->debug('in invoke_method, no WSDL for operation=' . $this->methodname); - $this->fault('Client', "Operation '" . $this->methodname . "' is not defined in the WSDL for this service"); - return; - } - } else { - $this->debug('in invoke_method, no WSDL to validate method'); - } - - // if a . is present in $this->methodname, we see if there is a class in scope, - // which could be referred to. We will also distinguish between two deliminators, - // to allow methods to be called a the class or an instance - $class = ''; - $method = ''; - if (strpos($this->methodname, '..') > 0) { - $delim = '..'; - } else if (strpos($this->methodname, '.') > 0) { - $delim = '.'; - } else { - $delim = ''; - } - - if (strlen($delim) > 0 && substr_count($this->methodname, $delim) == 1 && - class_exists(substr($this->methodname, 0, strpos($this->methodname, $delim)))) { - // get the class and method name - $class = substr($this->methodname, 0, strpos($this->methodname, $delim)); - $method = substr($this->methodname, strpos($this->methodname, $delim) + strlen($delim)); - $this->debug("in invoke_method, class=$class method=$method delim=$delim"); - } - - // does method exist? - if ($class == '') { - if (!function_exists($this->methodname)) { - $this->debug("in invoke_method, function '$this->methodname' not found!"); - $this->result = 'fault: method not found'; - $this->fault('Client',"method '$this->methodname' not defined in service"); - return; - } - } else { - $method_to_compare = (substr(phpversion(), 0, 2) == '4.') ? strtolower($method) : $method; - if (!in_array($method_to_compare, get_class_methods($class))) { - $this->debug("in invoke_method, method '$this->methodname' not found in class '$class'!"); - $this->result = 'fault: method not found'; - $this->fault('Client',"method '$this->methodname' not defined in service"); - return; - } - } - - // evaluate message, getting back parameters - // verify that request parameters match the method's signature - if(! $this->verify_method($this->methodname,$this->methodparams)){ - // debug - $this->debug('ERROR: request not verified against method signature'); - $this->result = 'fault: request failed validation against method signature'; - // return fault - $this->fault('Client',"Operation '$this->methodname' not defined in service."); - return; - } - - // if there are parameters to pass - $this->debug('in invoke_method, params:'); - $this->appendDebug($this->varDump($this->methodparams)); - $this->debug("in invoke_method, calling '$this->methodname'"); - - if ($class == '') { - $this->debug('in invoke_method, calling function using call_user_func_array()'); - $call_arg = "$this->methodname"; // straight assignment changes $this->methodname to lower case after call_user_func_array() - } elseif ($delim == '..') { - $this->debug('in invoke_method, calling class method using call_user_func_array()'); - $call_arg = array ($class, $method); - } else { - $this->debug('in invoke_method, calling instance method using call_user_func_array()'); - $instance = new $class (); - $call_arg = array(&$instance, $method); - } - - // - // Insert CUBE CODE - // - $root =& XCube_Root::getSingleton(); - $root->mController->mUser->setService(true); - $retValue = call_user_func_array($call_arg, array($root->mController->mUser, $this->methodparams)); - - if (is_array($retValue)) { - $retValue = $this->_encodeUTF8($retValue, $root->mLanguageManager); - } - else { - $retValue = $root->mLanguageManager->encodeUTF8($retValue); - } - - $this->methodreturn = $retValue; - - $this->debug('in invoke_method, methodreturn:'); - $this->appendDebug($this->varDump($this->methodreturn)); - $this->debug("in invoke_method, called method $this->methodname, received $this->methodreturn of type ".gettype($this->methodreturn)); - } - - function _encodeUTF8($arr, &$languageManager) - { - foreach (array_keys($arr) as $key) { - if (is_array($arr[$key])) { - $arr[$key] = $this->_encodeUTF8($arr[$key], $languageManager); - } - else { - $arr[$key] = $languageManager->encodeUTF8($arr[$key]); - } - } - - return $arr; - } -} - - -?> \ No newline at end of file