Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

156 lines (141 sloc) 6.084 kB
<?php
/**
* Example server.
*
* 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 Shane Caraveo <Shane@Caraveo.com> Port to PEAR and more
* @author Jan Schneider <jan@horde.org> Maintenance
* @copyright 2003-2007 The PHP Group
* @license http://www.php.net/license/2_02.txt PHP License 2.02
* @link http://pear.php.net/package/SOAP
*/
/** SOAP_Value */
require_once 'SOAP/Value.php';
require_once 'SOAP/Fault.php';
/** SOAPStruct */
require_once dirname(__FILE__) . '/example_types.php';
/* Create a class for your SOAP functions. */
class SOAP_Example_Server {
/* The dispatch map does not need to be used, but aids the server class in
* knowing what parameters are used with the functions. This is the ONLY
* way to have multiple OUT parameters. If you use a dispatch map, you
* MUST add ALL functions you wish to allow be called. If you do not use
* a dispatch map, then any public function can be called from SOAP. We
* consider this to be any function in the class unless it starts with
* underscore. If you do not define in/out parameters, the function can
* be called with parameters, but no validation on parameters will
* occur. */
var $__dispatch_map = array();
function SOAP_Example_Server() {
/* When generating WSDL for a server, you have to define any special
* complex types that you use (ie classes). Using a namespace id
* before the type will create an XML schema with the targetNamespace
* for the type multiple types with the same namespace will appear in
* the same schema section. Types with different namespaces will be
* in seperate schema sections. The following SOAPStruct typedef
* cooresponds to the SOAPStruct class above. */
$this->__typedef['{http://soapinterop.org/xsd}SOAPStruct'] =
array('varString' => 'string',
'varInt' => 'int',
'varFloat' => 'float');
/* An aliased function with multiple out parameters. */
$this->__dispatch_map['echoStructAsSimpleTypes'] =
array('in' => array('inputStruct' => '{http://soapinterop.org/xsd}SOAPStruct'),
'out' => array('outputString' => 'string',
'outputInteger' => 'int',
'outputFloat' => 'float'),
'alias' => 'myEchoStructAsSimpleTypes');
$this->__dispatch_map['echoStringSimple'] =
array('in' => array('inputStringSimple' => 'string'),
'out' => array('outputStringSimple' => 'string'));
$this->__dispatch_map['echoString'] =
array('in' => array('inputString' => 'string'),
'out' => array('outputString' => 'string'));
$this->__dispatch_map['divide'] =
array('in' => array('dividend' => 'int',
'divisor' => 'int'),
'out' => array('outputFloat' => 'float'));
$this->__dispatch_map['echoStruct'] =
array('in' => array('inputStruct' => '{http://soapinterop.org/xsd}SOAPStruct'),
'out' => array('outputStruct' => '{http://soapinterop.org/xsd}SOAPStruct'));
$this->__dispatch_map['echoMimeAttachment'] =
array('in' => array('stuff' => 'string'),
'out' => array('outputMime' => 'string'));
}
/* This private function is called on by SOAP_Server to determine any
* special dispatch information that might be necessary. This, for
* example, can be used to set up a dispatch map for functions that return
* multiple OUT parameters. */
function __dispatch($methodname)
{
if (isset($this->__dispatch_map[$methodname])) {
return $this->__dispatch_map[$methodname];
}
return null;
}
/* A simple echoString function. */
function echoStringSimple($inputString)
{
return $inputString;
}
/* An explicit echoString function. */
function echoString($inputString)
{
return new SOAP_Value('outputString', 'string', $inputString);
}
function divide($dividend, $divisor)
{
/* The SOAP server would normally catch errors like this and return a
* fault, but this is how you do it yourself. */
if ($divisor == 0) {
return new SOAP_Fault('You cannot divide by zero', 'Client');
} else {
return $dividend / $divisor;
}
}
function echoStruct($inputStruct)
{
return $inputStruct->__to_soap('outputStruct');
}
/**
* Takes a SOAPStruct as input, and returns each of its elements as OUT
* parameters.
*
* This function is also aliased so you have to call it as
* echoStructAsSimpleTypes.
*
* SOAPStruct is defined as:
* <code>
* struct SOAPStruct:
* string varString
* integer varInt
* float varFloat
* </code>
*/
function myEchoStructAsSimpleTypes($struct)
{
/* Convert a SOAPStruct to an array. */
return array(
new SOAP_Value('outputString', 'string', $struct->varString),
new SOAP_Value('outputInteger', 'int', $struct->varInt),
new SOAP_Value('outputFloat', 'float', $struct->varFloat)
);
}
function echoMimeAttachment($stuff)
{
return new SOAP_Attachment('return',
'application/octet-stream',
null,
$stuff);
}
}
Jump to Line
Something went wrong with that request. Please try again.