Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

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.