Re: Re: Passing objects to soap server, complexType, classmap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 20 Jun 2006 11:26:03 +1200, Morgan Pyne wrote:
> 
> However, it was my understanding that this was the purpose of using
> classmaps with the soap extension i.e. mapping (on both ends of a SOAP
> connection) from WSDL complexTypes to PHP classes.
> 
> If this is not what classmaps are supposed to be used for, can you explain
> to me how they should work and when they should be used?
> 
I have never used the classmap option before but inspired by this thread
I made a small test. It shows, indeed, that ext/SOAP does solve your
problem:-)

WSDL
<?php

    class person {

	public $firstname;
	public $lastname;

    }

    class client {

	private $link;

	public function __construct($wsdl)
	{
	    $this->link = new SoapClient(
		$wsdl, array(
		    'classmap' => array('input', 'person'),
		    'trace' => true
		));
	}

	public function newPerson(person $p)
	{
	    try {
		$this->link->newPerson($p);
	    }
	    catch (SoapFault $sf)
	    {
		print_r ($sf->getMessage());
		$this->debug();
	    }

	}

	public function debug()
	{
	    echo $this->link->__getLastRequest(), "\n";
	    echo $this->link->__getLastResponse(), "\n";
	}

    }

    $client = new client('test.wsdl');
    $person = new person();
    $person->firstname = 'Donald';
    $person->lastname = 'Duck';
    $client->newPerson($person);
?>

Server
<?php

    class testInput {
	private $firstname;
	private $lastname;

	public function getPerson()
	{
	    return $this->firstname . " " . $this->lastname;
	}

    }

    class server {

	public function newPerson(testInput $p)
	{
	    return new SoapFault('client', $p->getPerson());
	}
	
    }

    ini_set('soap.wsdl_cache_enabled', '0');
    $s = new SoapServer(
	'test.wsdl',
	array('classmap' => array('input' => 'testInput'))
    );
    $s->setClass('server');
    $s->handle();
?>

Client
<?php

    class person {

	public $firstname;
	public $lastname;

    }

    class client {

	private $link;

	public function __construct($wsdl)
	{
	    $this->link = new SoapClient(
		$wsdl, array(
		    'classmap' => array('input', 'person'),
		    'trace' => true
		));
	}

	public function newPerson(person $p)
	{
	    try {
		$this->link->newPerson($p);
	    }
	    catch (SoapFault $sf)
	    {
		print_r ($sf->getMessage());
		$this->debug();
	    }

	}

	public function debug()
	{
	    echo $this->link->__getLastRequest(), "\n";
	    echo $this->link->__getLastResponse(), "\n";
	}

    }

    $client = new client('test.wsdl');
    $person = new person();
    $person->firstname = 'Donald';
    $person->lastname = 'Duck';
    $client->newPerson($person);
?>



-- 
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917

-- 
PHP Soap Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [PHP Users]     [Kernel Newbies]     [PHP Database]     [Yosemite]

  Powered by Linux