ILIAS  trunk Revision v11.0_alpha-1744-gb0451eebef4
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
nusoap_server Class Reference

nusoap_server allows the user to create a SOAP server that is capable of receiving messages and returning responses More...

+ Inheritance diagram for nusoap_server:
+ Collaboration diagram for nusoap_server:

Public Member Functions

 __construct ($wsdl=false)
 constructor the optional parameter is a path to a WSDL file that you'd like to bind the server instance to. More...
 
 service ($data)
 processes request and returns response More...
 
 parse_http_headers ()
 parses HTTP request headers. More...
 
 parse_request ($data='')
 parses a request More...
 
 invoke_method ()
 invokes a PHP function for the requested SOAP method More...
 
 serialize_return ()
 serializes the return value from a PHP function into a full SOAP Envelope More...
 
 send_response ()
 sends an HTTP response More...
 
 verify_method ($operation, $request)
 takes the value that was created by parsing the request and compares to the method's signature, if available. More...
 
 parseRequest ($headers, $data)
 processes SOAP message received from client More...
 
 getHTTPBody ($soapmsg)
 gets the HTTP body for the current response. More...
 
 getHTTPContentType ()
 gets the HTTP content type for the current response. More...
 
 getHTTPContentTypeCharset ()
 gets the HTTP content type charset for the current response. More...
 
 add_to_map ($methodname, $in, $out)
 add a method to the dispatch map (this has been replaced by the register method) More...
 
 register ($name, $in=array(), $out=array(), $namespace=false, $soapaction=false, $style=false, $use=false, $documentation='', $encodingStyle='')
 register a service function with the server More...
 
 fault ($faultcode, $faultstring, $faultactor='', $faultdetail='')
 Specify a fault to be returned to the client. More...
 
 configureWSDL ($serviceName, $namespace=false, $endpoint=false, $style='rpc', $transport='http://schemas.xmlsoap.org/soap/http', $schemaTargetNamespace=false)
 Sets up wsdl object. More...
 
 addInternalPort (string $serviceName, string $url)
 
- Public Member Functions inherited from nusoap_base
 __construct ()
 constructor More...
 
 getGlobalDebugLevel ()
 gets the global debug level, which applies to future instances More...
 
 setGlobalDebugLevel ($level)
 sets the global debug level, which applies to future instances More...
 
 getDebugLevel ()
 gets the debug level for this instance More...
 
 setDebugLevel ($level)
 sets the debug level for this instance More...
 
 debug ($string)
 adds debug data to the instance debug string with formatting More...
 
 appendDebug ($string)
 adds debug data to the instance debug string without formatting More...
 
 clearDebug ()
 clears the current debug data for this instance More...
 
getDebug ()
 gets the current debug data for this instance More...
 
getDebugAsXMLComment ()
 gets the current debug data for this instance as an XML comment this may change the contents of the debug data More...
 
 expandEntities ($val)
 expands entities, e.g. More...
 
 getError ()
 returns error string if present More...
 
 setError ($str)
 sets error string More...
 
 isArraySimpleOrStruct ($val)
 detect if array is a simple array or a struct (associative array) More...
 
 serialize_val ($val, $name=false, $type=false, $name_ns=false, $type_ns=false, $attributes=false, $use='encoded', $soapval=false)
 serializes PHP values in accordance w/ section 5. More...
 
 serializeEnvelope ($body, $headers=false, $namespaces=array(), $style='rpc', $use='encoded', $encodingStyle='http://schemas.xmlsoap.org/soap/encoding/')
 serializes a message More...
 
 formatDump ($str)
 formats a string to be inserted into an HTML stream More...
 
 contractQname ($qname)
 contracts (changes namespace to prefix) a qualified name More...
 
 expandQname ($qname)
 expands (changes prefix to namespace) a qualified name More...
 
 getLocalPart ($str)
 returns the local part of a prefixed string returns the original string, if not prefixed More...
 
 getPrefix ($str)
 returns the prefix part of a prefixed string returns false, if not prefixed More...
 
 getNamespaceFromPrefix ($prefix)
 pass it a prefix, it returns a namespace More...
 
 getPrefixFromNamespace ($ns)
 returns the prefix for a given namespace (or prefix) or false if no prefixes registered for the given namespace More...
 
 getmicrotime ()
 returns the time in ODBC canonical form with microseconds More...
 
 varDump ($data)
 Returns a string with the output of var_dump. More...
 
 __toString ()
 represents the object as a string More...
 

Data Fields

 $opData
 
 $headers = array()
 
 $request = ''
 
 $requestHeaders = ''
 
 $requestHeader = null
 
 $document = ''
 
 $requestSOAP = ''
 
 $methodURI = ''
 
 $methodname = ''
 
 $methodparams = array()
 
 $SOAPAction = ''
 
 $xml_encoding = ''
 
 $decode_utf8 = true
 
 $class
 
 $outgoing_headers = array()
 
 $response = ''
 
 $responseHeaders = ''
 
 $responseSOAP = ''
 
 $methodreturn = false
 
 $methodreturnisliteralxml = false
 
 $fault = false
 
 $result = 'successful'
 
 $operations = array()
 
 $wsdl = false
 
 $externalWSDLURL = false
 
 $debug_flag = false
 
- Data Fields inherited from nusoap_base
 $title = 'NuSOAP'
 
 $version = '0.7.3'
 
 $revision = '$Revision$'
 
 $error_str = ''
 
 $debug_str = ''
 
 $charencoding = true
 
 $debugLevel
 
 $XMLSchemaVersion = 'http://www.w3.org/2001/XMLSchema'
 
 $soap_defencoding = 'UTF-8'
 
 $namespaces
 
 $usedNamespaces = array()
 
 $typemap
 
 $xmlEntities
 

Detailed Description

nusoap_server allows the user to create a SOAP server that is capable of receiving messages and returning responses

Author
Dietrich Ayala dietr.nosp@m.ich@.nosp@m.ganx4.nosp@m..com
Scott Nichol snich.nosp@m.ol@u.nosp@m.sers..nosp@m.sour.nosp@m.cefor.nosp@m.ge.n.nosp@m.et
Version
$Id$ public

Definition at line 3477 of file nusoap.php.

Constructor & Destructor Documentation

◆ __construct()

nusoap_server::__construct (   $wsdl = false)

constructor the optional parameter is a path to a WSDL file that you'd like to bind the server instance to.

Parameters
mixed$wsdlfile path or URL (string), or wsdl instance (object) public

Definition at line 3637 of file nusoap.php.

References $_SERVER, ILIAS\GlobalScreen\Provider\__construct(), nusoap_base\appendDebug(), nusoap_base\clearDebug(), nusoap_base\debug(), nusoap_base\getDebug(), nusoap_base\getError(), and nusoap_base\varDump().

3638  {
3640  // turn on debugging?
3641  global $debug;
3642  global $HTTP_SERVER_VARS;
3643 
3644  if (isset($_SERVER)) {
3645  $this->debug("_SERVER is defined:");
3646  $this->appendDebug($this->varDump($_SERVER));
3647  } elseif (isset($HTTP_SERVER_VARS)) {
3648  $this->debug("HTTP_SERVER_VARS is defined:");
3649  $this->appendDebug($this->varDump($HTTP_SERVER_VARS));
3650  } else {
3651  $this->debug("Neither _SERVER nor HTTP_SERVER_VARS is defined.");
3652  }
3653 
3654  if (isset($debug)) {
3655  $this->debug("In nusoap_server, set debug_flag=$debug based on global flag");
3656  $this->debug_flag = $debug;
3657  } elseif (isset($_SERVER['QUERY_STRING'])) {
3658  $qs = explode('&', $_SERVER['QUERY_STRING']);
3659  foreach ($qs as $v) {
3660  if (substr($v, 0, 6) == 'debug=') {
3661  $this->debug("In nusoap_server, set debug_flag=" . substr($v, 6) . " based on query string #1");
3662  $this->debug_flag = substr($v, 6);
3663  }
3664  }
3665  } elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
3666  $qs = explode('&', $HTTP_SERVER_VARS['QUERY_STRING']);
3667  foreach ($qs as $v) {
3668  if (substr($v, 0, 6) == 'debug=') {
3669  $this->debug("In nusoap_server, set debug_flag=" . substr($v, 6) . " based on query string #2");
3670  $this->debug_flag = substr($v, 6);
3671  }
3672  }
3673  }
3674 
3675  // wsdl
3676  if ($wsdl) {
3677  $this->debug("In nusoap_server, WSDL is specified");
3678  if (is_object($wsdl) && (get_class($wsdl) == 'wsdl')) {
3679  $this->wsdl = $wsdl;
3680  $this->externalWSDLURL = $this->wsdl->wsdl;
3681  $this->debug('Use existing wsdl instance from ' . $this->externalWSDLURL);
3682  } else {
3683  $this->debug('Create wsdl from ' . $wsdl);
3684  $this->wsdl = new wsdl($wsdl);
3685  $this->externalWSDLURL = $wsdl;
3686  }
3687  $this->appendDebug($this->wsdl->getDebug());
3688  $this->wsdl->clearDebug();
3689  if ($err = $this->wsdl->getError()) {
3690  die('WSDL ERROR: ' . $err);
3691  }
3692  }
3693  }
appendDebug($string)
adds debug data to the instance debug string without formatting
Definition: nusoap.php:263
& getDebug()
gets the current debug data for this instance
Definition: nusoap.php:290
parses a WSDL file, allows access to it's data, other utility methods.
Definition: nusoap.php:4587
getError()
returns error string if present
Definition: nusoap.php:339
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
varDump($data)
Returns a string with the output of var_dump.
Definition: nusoap.php:867
__construct(Container $dic, ilPlugin $plugin)
clearDebug()
clears the current debug data for this instance
Definition: nusoap.php:277
+ Here is the call graph for this function:

Member Function Documentation

◆ add_to_map()

nusoap_server::add_to_map (   $methodname,
  $in,
  $out 
)

add a method to the dispatch map (this has been replaced by the register method)

Parameters
string$methodname
string$inarray of input values
string$outarray of output values public
Deprecated:

Definition at line 4373 of file nusoap.php.

References $out.

4374  {
4375  $this->operations[$methodname] = array('name' => $methodname,'in' => $in,'out' => $out);
4376  }
$out
Definition: buildRTE.php:24

◆ addInternalPort()

nusoap_server::addInternalPort ( string  $serviceName,
string  $url 
)

Definition at line 4553 of file nusoap.php.

References $url.

4553  : void
4554  {
4555  $port = $this->wsdl->ports[$serviceName . 'Port'] ?? [
4556  'binding' => $serviceName . 'Binding',
4557  'location' => [],
4558  'bindingType' => 'http://schemas.xmlsoap.org/wsdl/soap/'
4559  ];
4560 
4561  $port['location'] = is_array($port['location']) ? array_merge($port['location'], [$url]) : [$port['location'], $url];
4562 
4563  $this->wsdl->ports[$serviceName . 'Port'] = $port;
4564  }
if(empty($path)) $serviceName
Definition: ltiservices.php:35
parses a WSDL file, allows access to it's data, other utility methods.
Definition: nusoap.php:4587
$url
Definition: shib_logout.php:66

◆ configureWSDL()

nusoap_server::configureWSDL (   $serviceName,
  $namespace = false,
  $endpoint = false,
  $style = 'rpc',
  $transport = 'http://schemas.xmlsoap.org/soap/http',
  $schemaTargetNamespace = false 
)

Sets up wsdl object.

Acts as a flag to enable internal WSDL generation

Parameters
string$serviceName,nameof the service
mixed$namespaceoptional 'tns' service namespace or false
mixed$endpointoptional URL of service endpoint or false
string$styleoptional (rpc|document) WSDL style (also specified by operation)
string$transportoptional SOAP transport
mixed$schemaTargetNamespaceoptional 'types' targetNamespace for service schema or false

Definition at line 4482 of file nusoap.php.

References $_SERVER, $namespace, $serviceName, and nusoap_base\setError().

4482  ://schemas.xmlsoap.org/soap/http', $schemaTargetNamespace = false)
4483  {
4484  global $HTTP_SERVER_VARS;
4485 
4486  if (isset($_SERVER)) {
4487  $SERVER_NAME = $_SERVER['SERVER_NAME'];
4488  $SERVER_PORT = $_SERVER['SERVER_PORT'];
4489  $SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
4490  $HTTPS = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off');
4491  } elseif (isset($HTTP_SERVER_VARS)) {
4492  $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME'];
4493  $SERVER_PORT = $HTTP_SERVER_VARS['SERVER_PORT'];
4494  $SCRIPT_NAME = isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME'];
4495  $HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off';
4496  } else {
4497  $this->setError("Neither _SERVER nor HTTP_SERVER_VARS is available");
4498  }
4499  // If server name has port number attached then strip it (else port number gets duplicated in WSDL output) (occurred using lighttpd and FastCGI)
4500  $colon = strpos($SERVER_NAME, ":");
4501  if ($colon) {
4502  $SERVER_NAME = substr($SERVER_NAME, 0, $colon);
4503  }
4504  if ($SERVER_PORT == 80) {
4505  $SERVER_PORT = '';
4506  } else {
4507  $SERVER_PORT = ':' . $SERVER_PORT;
4508  }
4509  if (false == $namespace) {
4510  $namespace = "http://$SERVER_NAME/soap/$serviceName";
4511  }
4512 
4513  if (false == $endpoint) {
4514  if ($HTTPS == '1' || $HTTPS == 'on') {
4515  $SCHEME = 'https';
4516  } else {
4517  $SCHEME = 'http';
4518  }
4519  $endpoint = "$SCHEME://$SERVER_NAME$SERVER_PORT$SCRIPT_NAME";
4520  }
4521 
4522  if (false == $schemaTargetNamespace) {
4523  $schemaTargetNamespace = $namespace;
4524  }
4525 
4526  $this->wsdl = new wsdl();
4527  $this->wsdl->serviceName = $serviceName;
4528  $this->wsdl->endpoint = $endpoint;
4529  $this->wsdl->namespaces['tns'] = $namespace;
4530  $this->wsdl->namespaces['soap'] = 'http://schemas.xmlsoap.org/wsdl/soap/';
4531  $this->wsdl->namespaces['wsdl'] = 'http://schemas.xmlsoap.org/wsdl/';
4532  if ($schemaTargetNamespace != $namespace) {
4533  $this->wsdl->namespaces['types'] = $schemaTargetNamespace;
4534  }
4535  $this->wsdl->schemas[$schemaTargetNamespace][0] = new nusoap_xmlschema('', '', $this->wsdl->namespaces);
4536  if ($style == 'document') {
4537  $this->wsdl->schemas[$schemaTargetNamespace][0]->schemaInfo['elementFormDefault'] = 'qualified';
4538  }
4539  $this->wsdl->schemas[$schemaTargetNamespace][0]->schemaTargetNamespace = $schemaTargetNamespace;
4540  $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/soap/encoding/'][0] = array('location' => '', 'loaded' => true);
4541  $this->wsdl->schemas[$schemaTargetNamespace][0]->imports['http://schemas.xmlsoap.org/wsdl/'][0] = array('location' => '', 'loaded' => true);
4542  $this->wsdl->bindings[$serviceName . 'Binding'] = array(
4543  'name' => $serviceName . 'Binding',
4544  'style' => $style,
4545  'transport' => $transport,
4546  'portType' => $serviceName . 'PortType');
4547  $this->wsdl->ports[$serviceName . 'Port'] = array(
4548  'binding' => $serviceName . 'Binding',
4549  'location' => $endpoint,
4550  'bindingType' => 'http://schemas.xmlsoap.org/wsdl/soap/');
4551  }
if($err=$client->getError()) $namespace
setError($str)
sets error string
Definition: nusoap.php:353
if(empty($path)) $serviceName
Definition: ltiservices.php:35
parses a WSDL file, allows access to it's data, other utility methods.
Definition: nusoap.php:4587
parses an XML Schema, allows access to it's data, other utility methods.
Definition: nusoap.php:1085
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
+ Here is the call graph for this function:

◆ fault()

nusoap_server::fault (   $faultcode,
  $faultstring,
  $faultactor = '',
  $faultdetail = '' 
)

Specify a fault to be returned to the client.

This also acts as a flag to the server that a fault has occured.

Parameters
string$faultcode
string$faultstring
string$faultactor
string$faultdetailpublic

Definition at line 4462 of file nusoap.php.

References nusoap_base\$soap_defencoding, and nusoap_base\getDebug().

4463  {
4464  if ($faultdetail == '' && $this->debug_flag) {
4465  $faultdetail = $this->getDebug();
4466  }
4467  $this->fault = new nusoap_fault($faultcode, $faultactor, $faultstring, $faultdetail);
4468  $this->fault->soap_defencoding = $this->soap_defencoding;
4469  }
Contains information for a SOAP fault.
Definition: nusoap.php:993
& getDebug()
gets the current debug data for this instance
Definition: nusoap.php:290
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
$soap_defencoding
Definition: nusoap.php:122
+ Here is the call graph for this function:

◆ getHTTPBody()

nusoap_server::getHTTPBody (   $soapmsg)

gets the HTTP body for the current response.

Parameters
string$soapmsgThe SOAP payload
Returns
string The HTTP body, which includes the SOAP payload private

Definition at line 4332 of file nusoap.php.

4333  {
4334  return $soapmsg;
4335  }

◆ getHTTPContentType()

nusoap_server::getHTTPContentType ( )

gets the HTTP content type for the current response.

Note: getHTTPBody must be called before this.

Returns
string the HTTP content type for the current response. private

Definition at line 4345 of file nusoap.php.

4346  {
4347  return 'text/xml';
4348  }

◆ getHTTPContentTypeCharset()

nusoap_server::getHTTPContentTypeCharset ( )

gets the HTTP content type charset for the current response.

returns false for non-text content types.

Note: getHTTPBody must be called before this.

Returns
string the HTTP content type charset for the current response. private

Definition at line 4359 of file nusoap.php.

References nusoap_base\$soap_defencoding.

4360  {
4361  return $this->soap_defencoding;
4362  }
$soap_defencoding
Definition: nusoap.php:122

◆ invoke_method()

nusoap_server::invoke_method ( )

invokes a PHP function for the requested SOAP method

The following fields are set by this function (when successful)

methodreturn

Note that the PHP function that is called may also set the following fields to affect the response sent to the client

responseHeaders outgoing_headers

This sets the fault field on error

private

Definition at line 3941 of file nusoap.php.

References $param, nusoap_base\appendDebug(), nusoap_base\debug(), wsdl\getOperationData(), wsdl\getOperationDataForSoapAction(), and nusoap_base\varDump().

3942  {
3943  $this->debug('in invoke_method, methodname=' . $this->methodname . ' methodURI=' . $this->methodURI . ' SOAPAction=' . $this->SOAPAction);
3944 
3945  if ($this->wsdl) {
3946  if ($this->opData = $this->wsdl->getOperationData($this->methodname)) {
3947  $this->debug('in invoke_method, found WSDL operation=' . $this->methodname);
3948  $this->appendDebug('opData=' . $this->varDump($this->opData));
3949  } elseif ($this->opData = $this->wsdl->getOperationDataForSoapAction($this->SOAPAction)) {
3950  // Note: hopefully this case will only be used for doc/lit, since rpc services should have wrapper element
3951  $this->debug('in invoke_method, found WSDL soapAction=' . $this->SOAPAction . ' for operation=' . $this->opData['name']);
3952  $this->appendDebug('opData=' . $this->varDump($this->opData));
3953  $this->methodname = $this->opData['name'];
3954  } else {
3955  $this->debug('in invoke_method, no WSDL for operation=' . $this->methodname);
3956  $this->fault('SOAP-ENV:Client', "Operation '" . $this->methodname . "' is not defined in the WSDL for this service");
3957  return;
3958  }
3959  } else {
3960  $this->debug('in invoke_method, no WSDL to validate method');
3961  }
3962 
3963  // if a . is present in $this->methodname, we see if there is a class in scope,
3964  // which could be referred to. We will also distinguish between two deliminators,
3965  // to allow methods to be called a the class or an instance
3966  $class = '';
3967  $method = '';
3968  if (strpos($this->methodname, '..') > 0) {
3969  $delim = '..';
3970  } elseif (strpos($this->methodname, '.') > 0) {
3971  $delim = '.';
3972  } else {
3973  $delim = '';
3974  }
3975 
3976  if (strlen($delim) > 0 && substr_count($this->methodname, $delim) == 1 &&
3977  class_exists(substr($this->methodname, 0, strpos($this->methodname, $delim)))) {
3978  // get the class and method name
3979  $class = substr($this->methodname, 0, strpos($this->methodname, $delim));
3980  $method = substr($this->methodname, strpos($this->methodname, $delim) + strlen($delim));
3981  $this->debug("in invoke_method, class=$class method=$method delim=$delim");
3982  }
3983  // set class handler
3984  // added to support single operations
3985  if ($class == '' && $this->class != '') {
3986  $class = $this->class;
3987  $delim = "..";
3988  $method = $this->methodname;
3989  }
3990 
3991  // does method exist?
3992  if ($class == '') {
3993  if (!function_exists($this->methodname)) {
3994  $this->debug("in invoke_method, function '$this->methodname' not found!");
3995  $this->result = 'fault: method not found';
3996  $this->fault('SOAP-ENV:Client', "method '$this->methodname' not defined in service");
3997  return;
3998  }
3999  } else {
4000  $method_to_compare = (substr(phpversion(), 0, 2) == '4.') ? strtolower($method) : $method;
4001  if (!in_array($method_to_compare, get_class_methods($class))) {
4002  $this->debug("in invoke_method, method '$this->methodname' not found in class '$class'!");
4003  $this->result = 'fault: method not found';
4004  $this->fault('SOAP-ENV:Client', "method '$this->methodname' not defined in service");
4005  return;
4006  }
4007  }
4008 
4009  // evaluate message, getting back parameters
4010  // verify that request parameters match the method's signature
4011  if (! $this->verify_method($this->methodname, $this->methodparams)) {
4012  // debug
4013  $this->debug('ERROR: request not verified against method signature');
4014  $this->result = 'fault: request failed validation against method signature';
4015  // return fault
4016  $this->fault('SOAP-ENV:Client', "Operation '$this->methodname' not defined in service.");
4017  return;
4018  }
4019 
4020  // if there are parameters to pass
4021  $this->debug('in invoke_method, params:');
4022  $this->appendDebug($this->varDump($this->methodparams));
4023  $this->debug("in invoke_method, calling '$this->methodname'");
4024  if (!function_exists('call_user_func_array')) {
4025  if ($class == '') {
4026  $this->debug('in invoke_method, calling function using eval()');
4027  $funcCall = "\$this->methodreturn = $this->methodname(";
4028  } else {
4029  if ($delim == '..') {
4030  $this->debug('in invoke_method, calling class method using eval()');
4031  $funcCall = "\$this->methodreturn = " . $class . "::" . $method . "(";
4032  } else {
4033  $this->debug('in invoke_method, calling instance method using eval()');
4034  // generate unique instance name
4035  $instname = "\$inst_" . time();
4036  $funcCall = $instname . " = new " . $class . "(); ";
4037  $funcCall .= "\$this->methodreturn = " . $instname . "->" . $method . "(";
4038  }
4039  }
4040  if ($this->methodparams) {
4041  foreach ($this->methodparams as $param) {
4042  if (is_array($param) || is_object($param)) {
4043  $this->fault('SOAP-ENV:Client', 'NuSOAP does not handle complexType parameters correctly when using eval; call_user_func_array must be available');
4044  return;
4045  }
4046  $funcCall .= "\"$param\",";
4047  }
4048  $funcCall = substr($funcCall, 0, -1);
4049  }
4050  $funcCall .= ');';
4051  $this->debug('in invoke_method, function call: ' . $funcCall);
4052  @eval($funcCall);
4053  } else {
4054  if ($class == '') {
4055  $this->debug('in invoke_method, calling function using call_user_func_array()');
4056  $call_arg = "$this->methodname"; // straight assignment changes $this->methodname to lower case after call_user_func_array()
4057  } elseif ($delim == '..') {
4058  $this->debug('in invoke_method, calling class method using call_user_func_array()');
4059  $call_arg = array($class, $method);
4060  } else {
4061  $this->debug('in invoke_method, calling instance method using call_user_func_array()');
4062  $instance = new $class();
4063  $call_arg = array(&$instance, $method);
4064  }
4065  if (is_array($this->methodparams)) {
4066  $this->methodreturn = call_user_func_array($call_arg, array_values($this->methodparams));
4067  } else {
4068  $this->methodreturn = call_user_func_array($call_arg, array());
4069  }
4070  }
4071  $this->debug('in invoke_method, methodreturn:');
4072  $this->appendDebug($this->varDump($this->methodreturn));
4073  $this->debug("in invoke_method, called method $this->methodname, received data of type " . gettype($this->methodreturn));
4074  }
appendDebug($string)
adds debug data to the instance debug string without formatting
Definition: nusoap.php:263
parses a WSDL file, allows access to it's data, other utility methods.
Definition: nusoap.php:4587
getOperationDataForSoapAction($soapAction, $bindingType='soap')
returns an associative array of data necessary for calling an operation
Definition: nusoap.php:5230
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
verify_method($operation, $request)
takes the value that was created by parsing the request and compares to the method's signature...
Definition: nusoap.php:4260
$param
Definition: xapitoken.php:46
varDump($data)
Returns a string with the output of var_dump.
Definition: nusoap.php:867
getOperationData($operation, $bindingType='soap')
returns an associative array of data necessary for calling an operation
Definition: nusoap.php:5198
+ Here is the call graph for this function:

◆ parse_http_headers()

nusoap_server::parse_http_headers ( )

parses HTTP request headers.

The following fields are set by this function (when successful)

headers request xml_encoding SOAPAction

private

Definition at line 3764 of file nusoap.php.

References $_SERVER, nusoap_base\debug(), and nusoap_base\setError().

3765  {
3766  global $HTTP_SERVER_VARS;
3767 
3768  $this->request = '';
3769  $this->SOAPAction = '';
3770  if (function_exists('getallheaders')) {
3771  $this->debug("In parse_http_headers, use getallheaders");
3772  $headers = getallheaders();
3773  foreach ($headers as $k => $v) {
3774  $k = strtolower($k);
3775  $this->headers[$k] = $v;
3776  $this->request .= "$k: $v\r\n";
3777  $this->debug("$k: $v");
3778  }
3779  // get SOAPAction header
3780  if (isset($this->headers['soapaction'])) {
3781  $this->SOAPAction = str_replace('"', '', $this->headers['soapaction']);
3782  }
3783  // get the character encoding of the incoming request
3784  if (isset($this->headers['content-type']) && strpos($this->headers['content-type'], '=')) {
3785  $enc = str_replace('"', '', substr(strstr($this->headers["content-type"], '='), 1));
3786  if (preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i', $enc)) {
3787  $this->xml_encoding = strtoupper($enc);
3788  } else {
3789  $this->xml_encoding = 'US-ASCII';
3790  }
3791  } else {
3792  // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3793  $this->xml_encoding = 'ISO-8859-1';
3794  }
3795  } elseif (isset($_SERVER) && is_array($_SERVER)) {
3796  $this->debug("In parse_http_headers, use _SERVER");
3797  foreach ($_SERVER as $k => $v) {
3798  if (substr($k, 0, 5) == 'HTTP_') {
3799  $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', substr($k, 5))));
3800  } else {
3801  $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', $k)));
3802  }
3803  if ($k == 'soapaction') {
3804  // get SOAPAction header
3805  $k = 'SOAPAction';
3806  $v = str_replace('"', '', $v);
3807  $v = str_replace('\\', '', $v);
3808  $this->SOAPAction = $v;
3809  } elseif ($k == 'content-type') {
3810  // get the character encoding of the incoming request
3811  if (strpos($v, '=')) {
3812  $enc = substr(strstr($v, '='), 1);
3813  $enc = str_replace('"', '', $enc);
3814  $enc = str_replace('\\', '', $enc);
3815  if (preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i', $enc)) {
3816  $this->xml_encoding = strtoupper($enc);
3817  } else {
3818  $this->xml_encoding = 'US-ASCII';
3819  }
3820  } else {
3821  // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3822  $this->xml_encoding = 'ISO-8859-1';
3823  }
3824  }
3825  $this->headers[$k] = $v;
3826  $this->request .= "$k: $v\r\n";
3827  $this->debug("$k: $v");
3828  }
3829  } elseif (is_array($HTTP_SERVER_VARS)) {
3830  $this->debug("In parse_http_headers, use HTTP_SERVER_VARS");
3831  foreach ($HTTP_SERVER_VARS as $k => $v) {
3832  if (substr($k, 0, 5) == 'HTTP_') {
3833  $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', substr($k, 5))));
3834  $k = strtolower(substr($k, 5));
3835  } else {
3836  $k = str_replace(' ', '-', strtolower(str_replace('_', ' ', $k)));
3837  $k = strtolower($k);
3838  }
3839  if ($k == 'soapaction') {
3840  // get SOAPAction header
3841  $k = 'SOAPAction';
3842  $v = str_replace('"', '', $v);
3843  $v = str_replace('\\', '', $v);
3844  $this->SOAPAction = $v;
3845  } elseif ($k == 'content-type') {
3846  // get the character encoding of the incoming request
3847  if (strpos($v, '=')) {
3848  $enc = substr(strstr($v, '='), 1);
3849  $enc = str_replace('"', '', $enc);
3850  $enc = str_replace('\\', '', $enc);
3851  if (preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i', $enc)) {
3852  $this->xml_encoding = strtoupper($enc);
3853  } else {
3854  $this->xml_encoding = 'US-ASCII';
3855  }
3856  } else {
3857  // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
3858  $this->xml_encoding = 'ISO-8859-1';
3859  }
3860  }
3861  $this->headers[$k] = $v;
3862  $this->request .= "$k: $v\r\n";
3863  $this->debug("$k: $v");
3864  }
3865  } else {
3866  $this->debug("In parse_http_headers, HTTP headers not accessible");
3867  $this->setError("HTTP headers not accessible");
3868  }
3869  }
setError($str)
sets error string
Definition: nusoap.php:353
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
+ Here is the call graph for this function:

◆ parse_request()

nusoap_server::parse_request (   $data = '')

parses a request

The following fields are set by this function (when successful)

headers request xml_encoding SOAPAction request requestSOAP methodURI methodname methodparams requestHeaders document

This sets the fault field on error

Parameters
string$dataXML string private

Definition at line 3893 of file nusoap.php.

References $data, and nusoap_base\debug().

3894  {
3895  $this->debug('entering parse_request()');
3896  $this->parse_http_headers();
3897  $this->debug('got character encoding: ' . $this->xml_encoding);
3898  // uncompress if necessary
3899  if (isset($this->headers['content-encoding']) && $this->headers['content-encoding'] != '') {
3900  $this->debug('got content encoding: ' . $this->headers['content-encoding']);
3901  if ($this->headers['content-encoding'] == 'deflate' || $this->headers['content-encoding'] == 'gzip') {
3902  // if decoding works, use it. else assume data wasn't gzencoded
3903  if (function_exists('gzuncompress')) {
3904  if ($this->headers['content-encoding'] == 'deflate' && $degzdata = @gzuncompress($data)) {
3905  $data = $degzdata;
3906  } elseif ($this->headers['content-encoding'] == 'gzip' && $degzdata = gzinflate(substr($data, 10))) {
3907  $data = $degzdata;
3908  } else {
3909  $this->fault('SOAP-ENV:Client', 'Errors occurred when trying to decode the data');
3910  return;
3911  }
3912  } else {
3913  $this->fault('SOAP-ENV:Client', 'This Server does not support compressed data');
3914  return;
3915  }
3916  }
3917  }
3918  $this->request .= "\r\n" . $data;
3919  $data = $this->parseRequest($this->headers, $data);
3920  $this->requestSOAP = $data;
3921  $this->debug('leaving parse_request');
3922  }
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
parseRequest($headers, $data)
processes SOAP message received from client
Definition: nusoap.php:4280
parse_http_headers()
parses HTTP request headers.
Definition: nusoap.php:3764
+ Here is the call graph for this function:

◆ parseRequest()

nusoap_server::parseRequest (   $headers,
  $data 
)

processes SOAP message received from client

Parameters
array$headersThe HTTP headers
string$dataunprocessed request data from client
Returns
mixed value of the message, decoded into a PHP type private

Definition at line 4280 of file nusoap.php.

References $data, nusoap_base\debug(), and nusoap_base\setError().

4281  {
4282  $this->debug('Entering parseRequest() for data of length ' . strlen($data) . ' and type ' . $headers['content-type']);
4283  if (!strstr($headers['content-type'], 'text/xml')) {
4284  $this->setError('Request not of type text/xml');
4285  return false;
4286  }
4287  if (strpos($headers['content-type'], '=')) {
4288  $enc = str_replace('"', '', substr(strstr($headers["content-type"], '='), 1));
4289  $this->debug('Got response encoding: ' . $enc);
4290  if (preg_match('/^(ISO-8859-1|US-ASCII|UTF-8)$/i', $enc)) {
4291  $this->xml_encoding = strtoupper($enc);
4292  } else {
4293  $this->xml_encoding = 'US-ASCII';
4294  }
4295  } else {
4296  // should be US-ASCII for HTTP 1.0 or ISO-8859-1 for HTTP 1.1
4297  $this->xml_encoding = 'ISO-8859-1';
4298  }
4299  $this->debug('Use encoding: ' . $this->xml_encoding . ' when creating nusoap_parser');
4300  // parse response, get soap parser obj
4301  $parser = new nusoap_parser($data, $this->xml_encoding, '', $this->decode_utf8);
4302  // parser debug
4303  $this->debug("parser debug: \n" . $parser->getDebug());
4304  // if fault occurred during message parsing
4305  if ($err = $parser->getError()) {
4306  $this->result = 'fault: error in msg parsing: ' . $err;
4307  $this->fault('SOAP-ENV:Client', "error in msg parsing:\n" . $err);
4308  // else successfully parsed request into soapval object
4309  } else {
4310  // get/set methodname
4311  $this->methodURI = $parser->root_struct_namespace;
4312  $this->methodname = $parser->root_struct_name;
4313  $this->debug('methodname: ' . $this->methodname . ' methodURI: ' . $this->methodURI);
4314  $this->debug('calling parser->get_soapbody()');
4315  $this->methodparams = $parser->get_soapbody();
4316  // get SOAP headers
4317  $this->requestHeaders = $parser->getHeaders();
4318  // get SOAP Header
4319  $this->requestHeader = $parser->get_soapheader();
4320  // add document for doclit support
4321  $this->document = $parser->document;
4322  }
4323  }
setError($str)
sets error string
Definition: nusoap.php:353
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
nusoap_parser class parses SOAP XML messages into native PHP values
Definition: nusoap.php:6521
+ Here is the call graph for this function:

◆ register()

nusoap_server::register (   $name,
  $in = array(),
  $out = array(),
  $namespace = false,
  $soapaction = false,
  $style = false,
  $use = false,
  $documentation = '',
  $encodingStyle = '' 
)

register a service function with the server

Parameters
string$namethe name of the PHP function, class.method or class..method
array$inassoc array of input values: key = param name, value = param type
array$outassoc array of output values: key = param name, value = param type
mixed$namespacethe element namespace for the method or false
mixed$soapactionthe soapaction for the method or false
mixed$styleoptional (rpc|document) or false Note: when 'document' is specified, parameter and return wrappers are created for you automatically
mixed$useoptional (encoded|literal) or false
string$documentationoptional Description to include in WSDL
string$encodingStyleoptional (usually 'http://schemas.xmlsoap.org/soap/encoding/' for encoded) public

Definition at line 4392 of file nusoap.php.

References $_SERVER, $namespace, $out, wsdl\addOperation(), and nusoap_base\setError().

4393  {
4394  global $HTTP_SERVER_VARS;
4395 
4396  if ($this->externalWSDLURL) {
4397  die('You cannot bind to an external WSDL file, and register methods outside of it! Please choose either WSDL or no WSDL.');
4398  }
4399  if (! $name) {
4400  die('You must specify a name when you register an operation');
4401  }
4402  if (!is_array($in)) {
4403  die('You must provide an array for operation inputs');
4404  }
4405  if (!is_array($out)) {
4406  die('You must provide an array for operation outputs');
4407  }
4408  if (false == $namespace) {
4409  }
4410  if (false == $soapaction) {
4411  if (isset($_SERVER)) {
4412  $SERVER_NAME = $_SERVER['SERVER_NAME'];
4413  $SCRIPT_NAME = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
4414  $HTTPS = isset($_SERVER['HTTPS']) ? $_SERVER['HTTPS'] : (isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off');
4415  } elseif (isset($HTTP_SERVER_VARS)) {
4416  $SERVER_NAME = $HTTP_SERVER_VARS['SERVER_NAME'];
4417  $SCRIPT_NAME = isset($HTTP_SERVER_VARS['PHP_SELF']) ? $HTTP_SERVER_VARS['PHP_SELF'] : $HTTP_SERVER_VARS['SCRIPT_NAME'];
4418  $HTTPS = isset($HTTP_SERVER_VARS['HTTPS']) ? $HTTP_SERVER_VARS['HTTPS'] : 'off';
4419  } else {
4420  $this->setError("Neither _SERVER nor HTTP_SERVER_VARS is available");
4421  }
4422  if ($HTTPS == '1' || $HTTPS == 'on') {
4423  $SCHEME = 'https';
4424  } else {
4425  $SCHEME = 'http';
4426  }
4427  $soapaction = "$SCHEME://$SERVER_NAME$SCRIPT_NAME/$name";
4428  }
4429  if (false == $style) {
4430  $style = "rpc";
4431  }
4432  if (false == $use) {
4433  $use = "encoded";
4434  }
4435  if ($use == 'encoded' && $encodingStyle = '') {
4436  $encodingStyle = 'http://schemas.xmlsoap.org/soap/encoding/';
4437  }
4438 
4439  $this->operations[$name] = array(
4440  'name' => $name,
4441  'in' => $in,
4442  'out' => $out,
4443  'namespace' => $namespace,
4444  'soapaction' => $soapaction,
4445  'style' => $style);
4446  if ($this->wsdl) {
4447  $this->wsdl->addOperation($name, $in, $out, $namespace, $soapaction, $style, $use, $documentation, $encodingStyle);
4448  }
4449  return true;
4450  }
if($err=$client->getError()) $namespace
setError($str)
sets error string
Definition: nusoap.php:353
parses a WSDL file, allows access to it's data, other utility methods.
Definition: nusoap.php:4587
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
$out
Definition: buildRTE.php:24
addOperation($name, $in=false, $out=false, $namespace=false, $soapaction=false, $style='rpc', $use='encoded', $documentation='', $encodingStyle='')
register an operation with the server
Definition: nusoap.php:6436
+ Here is the call graph for this function:

◆ send_response()

nusoap_server::send_response ( )

sends an HTTP response

The following fields are set by this function (when successful)

outgoing_headers response

private

Definition at line 4180 of file nusoap.php.

References $payload, nusoap_base\debug(), nusoap_base\getDebugAsXMLComment(), and ILIAS\UI\examples\Symbol\Glyph\Header\header().

4181  {
4182  $this->debug('Enter send_response');
4183  if ($this->fault) {
4184  $payload = $this->fault->serialize();
4185  $this->outgoing_headers[] = "HTTP/1.0 500 Internal Server Error";
4186  $this->outgoing_headers[] = "Status: 500 Internal Server Error";
4187  } else {
4189  // Some combinations of PHP+Web server allow the Status
4190  // to come through as a header. Since OK is the default
4191  // just do nothing.
4192  // $this->outgoing_headers[] = "HTTP/1.0 200 OK";
4193  // $this->outgoing_headers[] = "Status: 200 OK";
4194  }
4195  // add debug data if in debug mode
4196  if (isset($this->debug_flag) && $this->debug_flag) {
4197  $payload .= $this->getDebugAsXMLComment();
4198  }
4199  $this->outgoing_headers[] = "Server: $this->title Server v$this->version";
4200  preg_match('/\$Revisio' . 'n: ([^ ]+)/', $this->revision, $rev);
4201  $this->outgoing_headers[] = "X-SOAP-Server: $this->title/$this->version (" . $rev[1] . ")";
4202  // Let the Web server decide about this
4203  //$this->outgoing_headers[] = "Connection: Close\r\n";
4204  $payload = $this->getHTTPBody($payload);
4205  $type = $this->getHTTPContentType();
4206  $charset = $this->getHTTPContentTypeCharset();
4207  $this->outgoing_headers[] = "Content-Type: $type" . ($charset ? '; charset=' . $charset : '');
4208  //begin code to compress payload - by John
4209  // NOTE: there is no way to know whether the Web server will also compress
4210  // this data.
4211  if (strlen($payload) > 1024 && isset($this->headers) && isset($this->headers['accept-encoding'])) {
4212  if (strstr($this->headers['accept-encoding'], 'gzip')) {
4213  if (function_exists('gzencode')) {
4214  if (isset($this->debug_flag) && $this->debug_flag) {
4215  $payload .= "<!-- Content being gzipped -->";
4216  }
4217  $this->outgoing_headers[] = "Content-Encoding: gzip";
4218  $payload = gzencode($payload);
4219  } else {
4220  if (isset($this->debug_flag) && $this->debug_flag) {
4221  $payload .= "<!-- Content will not be gzipped: no gzencode -->";
4222  }
4223  }
4224  } elseif (strstr($this->headers['accept-encoding'], 'deflate')) {
4225  // Note: MSIE requires gzdeflate output (no Zlib header and checksum),
4226  // instead of gzcompress output,
4227  // which conflicts with HTTP 1.1 spec (http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.5)
4228  if (function_exists('gzdeflate')) {
4229  if (isset($this->debug_flag) && $this->debug_flag) {
4230  $payload .= "<!-- Content being deflated -->";
4231  }
4232  $this->outgoing_headers[] = "Content-Encoding: deflate";
4233  $payload = gzdeflate($payload);
4234  } else {
4235  if (isset($this->debug_flag) && $this->debug_flag) {
4236  $payload .= "<!-- Content will not be deflated: no gzcompress -->";
4237  }
4238  }
4239  }
4240  }
4241  //end code
4242  $this->outgoing_headers[] = "Content-Length: " . strlen($payload);
4243  reset($this->outgoing_headers);
4244  foreach ($this->outgoing_headers as $hdr) {
4245  header($hdr, false);
4246  }
4247  print $payload;
4248  $this->response = join("\r\n", $this->outgoing_headers) . "\r\n\r\n" . $payload;
4249  }
& getDebugAsXMLComment()
gets the current debug data for this instance as an XML comment this may change the contents of the d...
Definition: nusoap.php:304
getHTTPBody($soapmsg)
gets the HTTP body for the current response.
Definition: nusoap.php:4332
if(count($parts) !=3) $payload
Definition: ltitoken.php:67
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
getHTTPContentType()
gets the HTTP content type for the current response.
Definition: nusoap.php:4345
getHTTPContentTypeCharset()
gets the HTTP content type charset for the current response.
Definition: nusoap.php:4359
header()
expected output: > ILIAS shows the rendered Component.
Definition: header.php:29
+ Here is the call graph for this function:

◆ serialize_return()

nusoap_server::serialize_return ( )

serializes the return value from a PHP function into a full SOAP Envelope

The following fields are set by this function (when successful)

responseSOAP

This sets the fault field on error

private

Definition at line 4087 of file nusoap.php.

References $payload, nusoap_base\appendDebug(), nusoap_base\clearDebug(), nusoap_base\debug(), nusoap_base\getDebug(), nusoap_base\getError(), nusoap_base\serialize_val(), nusoap_base\serializeEnvelope(), wsdl\serializeRPCParameters(), and nusoap_base\varDump().

4088  {
4089  $this->debug('Entering serialize_return methodname: ' . $this->methodname . ' methodURI: ' . $this->methodURI);
4090  // if fault
4091  if (isset($this->methodreturn) && ((get_class((object) $this->methodreturn) == 'soap_fault') || (get_class((object) $this->methodreturn) == 'nusoap_fault'))) {
4092  $this->debug('got a fault object from method');
4093  $this->fault = $this->methodreturn;
4094  return;
4095  } elseif ($this->methodreturnisliteralxml) {
4096  $return_val = $this->methodreturn;
4097  // returned value(s)
4098  } else {
4099  $this->debug('got a(n) ' . gettype($this->methodreturn) . ' from method');
4100  $this->debug('serializing return value');
4101  if ($this->wsdl) {
4102  if (sizeof($this->opData['output']['parts']) > 1) {
4103  $this->debug('more than one output part, so use the method return unchanged');
4104  $opParams = $this->methodreturn;
4105  } elseif (sizeof($this->opData['output']['parts']) == 1) {
4106  $this->debug('exactly one output part, so wrap the method return in a simple array');
4107  // TODO: verify that it is not already wrapped!
4108  //foreach ($this->opData['output']['parts'] as $name => $type) {
4109  // $this->debug('wrap in element named ' . $name);
4110  //}
4111  $opParams = array($this->methodreturn);
4112  }
4113  $return_val = $this->wsdl->serializeRPCParameters($this->methodname, 'output', $opParams);
4114  $this->appendDebug($this->wsdl->getDebug());
4115  $this->wsdl->clearDebug();
4116  if ($errstr = $this->wsdl->getError()) {
4117  $this->debug('got wsdl error: ' . $errstr);
4118  $this->fault('SOAP-ENV:Server', 'unable to serialize result');
4119  return;
4120  }
4121  } else {
4122  if (isset($this->methodreturn)) {
4123  $return_val = $this->serialize_val($this->methodreturn, 'return');
4124  } else {
4125  $return_val = '';
4126  $this->debug('in absence of WSDL, assume void return for backward compatibility');
4127  }
4128  }
4129  }
4130  $this->debug('return value:');
4131  $this->appendDebug($this->varDump($return_val));
4132 
4133  $this->debug('serializing response');
4134  if ($this->wsdl) {
4135  $this->debug('have WSDL for serialization: style is ' . $this->opData['style']);
4136  if ($this->opData['style'] == 'rpc') {
4137  $this->debug('style is rpc for serialization: use is ' . $this->opData['output']['use']);
4138  if ($this->opData['output']['use'] == 'literal') {
4139  // http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html R2735 says rpc/literal accessor elements should not be in a namespace
4140  $payload = '<ns1:' . $this->methodname . 'Response xmlns:ns1="' . $this->methodURI . '">' . $return_val . '</ns1:' . $this->methodname . "Response>";
4141  } else {
4142  $payload = '<ns1:' . $this->methodname . 'Response xmlns:ns1="' . $this->methodURI . '">' . $return_val . '</ns1:' . $this->methodname . "Response>";
4143  }
4144  } else {
4145  $this->debug('style is not rpc for serialization: assume document');
4146  $payload = $return_val;
4147  }
4148  } else {
4149  $this->debug('do not have WSDL for serialization: assume rpc/encoded');
4150  $payload = '<ns1:' . $this->methodname . 'Response xmlns:ns1="' . $this->methodURI . '">' . $return_val . '</ns1:' . $this->methodname . "Response>";
4151  }
4152  $this->result = 'successful';
4153  if ($this->wsdl) {
4154  //if($this->debug_flag){
4155  $this->appendDebug($this->wsdl->getDebug());
4156  // }
4157  if (isset($opData['output']['encodingStyle'])) {
4158  $encodingStyle = $opData['output']['encodingStyle'];
4159  } else {
4160  $encodingStyle = '';
4161  }
4162  // Added: In case we use a WSDL, return a serialized env. WITH the usedNamespaces.
4163  $this->responseSOAP = $this->serializeEnvelope($payload, $this->responseHeaders, $this->wsdl->usedNamespaces, $this->opData['style'], $this->opData['output']['use'], $encodingStyle);
4164  } else {
4165  $this->responseSOAP = $this->serializeEnvelope($payload, $this->responseHeaders);
4166  }
4167  $this->debug("Leaving serialize_return");
4168  }
appendDebug($string)
adds debug data to the instance debug string without formatting
Definition: nusoap.php:263
& getDebug()
gets the current debug data for this instance
Definition: nusoap.php:290
parses a WSDL file, allows access to it&#39;s data, other utility methods.
Definition: nusoap.php:4587
if(count($parts) !=3) $payload
Definition: ltitoken.php:67
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
getError()
returns error string if present
Definition: nusoap.php:339
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
serializeRPCParameters($operation, $direction, $parameters, $bindingType='soap')
serialize PHP values according to a WSDL message definition contrary to the method name...
Definition: nusoap.php:5710
serializeEnvelope($body, $headers=false, $namespaces=array(), $style='rpc', $use='encoded', $encodingStyle='http://schemas.xmlsoap.org/soap/encoding/')
serializes a message
Definition: nusoap.php:658
varDump($data)
Returns a string with the output of var_dump.
Definition: nusoap.php:867
clearDebug()
clears the current debug data for this instance
Definition: nusoap.php:277
serialize_val($val, $name=false, $type=false, $name_ns=false, $type_ns=false, $attributes=false, $use='encoded', $soapval=false)
serializes PHP values in accordance w/ section 5.
Definition: nusoap.php:391
+ Here is the call graph for this function:

◆ service()

nusoap_server::service (   $data)

processes request and returns response

Parameters
string$datausually is the value of $HTTP_RAW_POST_DATA public

Definition at line 3701 of file nusoap.php.

References $_SERVER, $data, nusoap_base\appendDebug(), nusoap_base\debug(), nusoap_base\getDebugAsXMLComment(), ILIAS\UI\examples\Symbol\Glyph\Header\header(), wsdl\serialize(), nusoap_base\varDump(), and wsdl\webDescription().

3702  {
3703  global $HTTP_SERVER_VARS;
3704 
3705  if (isset($_SERVER['QUERY_STRING'])) {
3706  $qs = $_SERVER['QUERY_STRING'];
3707  } elseif (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
3708  $qs = $HTTP_SERVER_VARS['QUERY_STRING'];
3709  } else {
3710  $qs = '';
3711  }
3712  $this->debug("In service, query string=$qs");
3713 
3714  if (preg_match('/wsdl/', $qs)) {
3715  $this->debug("In service, this is a request for WSDL");
3716  if ($this->externalWSDLURL) {
3717  if (strpos($this->externalWSDLURL, "://") !== false) { // assume URL
3718  header('Location: ' . $this->externalWSDLURL);
3719  } else { // assume file
3720  header("Content-Type: text/xml\r\n");
3721  $fp = fopen($this->externalWSDLURL, 'r');
3722  fpassthru($fp);
3723  }
3724  } elseif ($this->wsdl) {
3725  header("Content-Type: text/xml; charset=ISO-8859-1\r\n");
3726  print $this->wsdl->serialize($this->debug_flag);
3727  if ($this->debug_flag) {
3728  $this->debug('wsdl:');
3729  $this->appendDebug($this->varDump($this->wsdl));
3730  print $this->getDebugAsXMLComment();
3731  }
3732  } else {
3733  header("Content-Type: text/html; charset=ISO-8859-1\r\n");
3734  print "This service does not provide WSDL";
3735  }
3736  } elseif ($data == '' && $this->wsdl) {
3737  $this->debug("In service, there is no data, so return Web description");
3738  print $this->wsdl->webDescription();
3739  } else {
3740  $this->debug("In service, invoke the request");
3741  $this->parse_request($data);
3742  if (! $this->fault) {
3743  $this->invoke_method();
3744  }
3745  if (! $this->fault) {
3746  $this->serialize_return();
3747  }
3748  $this->send_response();
3749  }
3750  }
appendDebug($string)
adds debug data to the instance debug string without formatting
Definition: nusoap.php:263
& getDebugAsXMLComment()
gets the current debug data for this instance as an XML comment this may change the contents of the d...
Definition: nusoap.php:304
parses a WSDL file, allows access to it&#39;s data, other utility methods.
Definition: nusoap.php:4587
send_response()
sends an HTTP response
Definition: nusoap.php:4180
parse_request($data='')
parses a request
Definition: nusoap.php:3893
fault($faultcode, $faultstring, $faultactor='', $faultdetail='')
Specify a fault to be returned to the client.
Definition: nusoap.php:4462
serialize_return()
serializes the return value from a PHP function into a full SOAP Envelope
Definition: nusoap.php:4087
serialize($debug=0)
serialize the parsed wsdl
Definition: nusoap.php:5468
debug($string)
adds debug data to the instance debug string with formatting
Definition: nusoap.php:250
invoke_method()
invokes a PHP function for the requested SOAP method
Definition: nusoap.php:3941
$_SERVER['HTTP_HOST']
Definition: raiseError.php:26
webDescription()
prints html description of services
Definition: nusoap.php:5326
varDump($data)
Returns a string with the output of var_dump.
Definition: nusoap.php:867
header()
expected output: > ILIAS shows the rendered Component.
Definition: header.php:29
+ Here is the call graph for this function:

◆ verify_method()

nusoap_server::verify_method (   $operation,
  $request 
)

takes the value that was created by parsing the request and compares to the method's signature, if available.

Parameters
string$operationThe operation to be invoked
array$requestThe array of parameter values
Returns
boolean Whether the operation was found private

Definition at line 4260 of file nusoap.php.

References wsdl\getOperationData().

4261  {
4262  if (isset($this->wsdl) && is_object($this->wsdl)) {
4263  if ($this->wsdl->getOperationData($operation)) {
4264  return true;
4265  }
4266  } elseif (isset($this->operations[$operation])) {
4267  return true;
4268  }
4269  return false;
4270  }
parses a WSDL file, allows access to it&#39;s data, other utility methods.
Definition: nusoap.php:4587
getOperationData($operation, $bindingType='soap')
returns an associative array of data necessary for calling an operation
Definition: nusoap.php:5198
+ Here is the call graph for this function:

Field Documentation

◆ $class

nusoap_server::$class

Definition at line 3552 of file nusoap.php.

◆ $debug_flag

nusoap_server::$debug_flag = false

Definition at line 3627 of file nusoap.php.

◆ $decode_utf8

nusoap_server::$decode_utf8 = true

Definition at line 3551 of file nusoap.php.

◆ $document

nusoap_server::$document = ''

Definition at line 3509 of file nusoap.php.

◆ $externalWSDLURL

nusoap_server::$externalWSDLURL = false

Definition at line 3621 of file nusoap.php.

◆ $fault

nusoap_server::$fault = false

Definition at line 3595 of file nusoap.php.

◆ $headers

nusoap_server::$headers = array()

Definition at line 3485 of file nusoap.php.

◆ $methodname

nusoap_server::$methodname = ''

Definition at line 3527 of file nusoap.php.

◆ $methodparams

nusoap_server::$methodparams = array()

Definition at line 3533 of file nusoap.php.

◆ $methodreturn

nusoap_server::$methodreturn = false

Definition at line 3583 of file nusoap.php.

◆ $methodreturnisliteralxml

nusoap_server::$methodreturnisliteralxml = false

Definition at line 3589 of file nusoap.php.

◆ $methodURI

nusoap_server::$methodURI = ''

Definition at line 3521 of file nusoap.php.

◆ $opData

nusoap_server::$opData

Definition at line 3479 of file nusoap.php.

◆ $operations

nusoap_server::$operations = array()

Definition at line 3609 of file nusoap.php.

◆ $outgoing_headers

nusoap_server::$outgoing_headers = array()

Definition at line 3559 of file nusoap.php.

◆ $request

nusoap_server::$request = ''

Definition at line 3491 of file nusoap.php.

◆ $requestHeader

nusoap_server::$requestHeader = null

Definition at line 3503 of file nusoap.php.

◆ $requestHeaders

nusoap_server::$requestHeaders = ''

Definition at line 3497 of file nusoap.php.

◆ $requestSOAP

nusoap_server::$requestSOAP = ''

Definition at line 3515 of file nusoap.php.

◆ $response

nusoap_server::$response = ''

Definition at line 3565 of file nusoap.php.

◆ $responseHeaders

nusoap_server::$responseHeaders = ''

Definition at line 3571 of file nusoap.php.

◆ $responseSOAP

nusoap_server::$responseSOAP = ''

Definition at line 3577 of file nusoap.php.

◆ $result

nusoap_server::$result = 'successful'

Definition at line 3601 of file nusoap.php.

◆ $SOAPAction

nusoap_server::$SOAPAction = ''

Definition at line 3539 of file nusoap.php.

◆ $wsdl

nusoap_server::$wsdl = false

Definition at line 3615 of file nusoap.php.

◆ $xml_encoding

nusoap_server::$xml_encoding = ''

Definition at line 3545 of file nusoap.php.


The documentation for this class was generated from the following file: