Re: [SOAP] Re: Passing objects to soap server, complexType, classmap
| From: | Michael Rasmussen | Date: | Mon, 19 Jun 2006 08:15:34 +0000 |
| Subject: | Re: [SOAP] Re: Passing objects to soap server, complexType, classmap | ||
| References: | 1 2 3 | Groups: | php.soap |
| Request: | Send a blank email to php-soap+get-2314@lists.php.net to get a copy of this message | ||
On Mon, 19 Jun 2006 11:52:08 +1200, Morgan Pyne wrote:
> Thx. The online documentation isn't terribly clear on all this and says
> several of the functions/objects (SoapVar, SoapParam) are for non-WSDL
> mode only, so I hadn't tried this. However, I just tried your suggestion
> but unfortunately I'm still not getting the correct object type on the
> server.
>
I agree, the documentation could need some brush-up.
> Your example below seems to be geared towards returning an object from the
> server rather than passing one to it, so here is what I tried:
>
Actually it is for both server and client. Read more later.
> - On the client, changed the method call to pass a SoapParam instead of
> directly passing my object i.e.
>
> $client = new
> SoapClient('http://myurl.com/wsdl' );
>
> $a = new someObj();
> $b = new SoapParam($a, 'name_of_comlexType_from_WSDL');
>
> $client->myRemoteMethod( $b );
>
>
> On the server, the 'myRemoteMethod()' is simply displaying the object type
> that it is passed. It is receiving the object as a 'StdClass', instead of
> a 'someObj'
>
> Is this the corrrect approach? Do I need to do anything additionally on
> the server side?
>
This is perfectly normal due to the fact that PHP is not a statical typed
language. Had you tried implementing the client in C++ or C# the server
would have serialized the SoapParam to a native C++ or C# class. In PHP
you have to do this yourself, Eg. you must provide a private method in the
server class which is capable of converting from a standard class to the
required class:
1)
a) $myObj = new MyObj();
b) $myObj->import(stdClass $a);
2) a) $myObj = MyObj::import(stdClass $a);
When dealing with WSDL I would recommend you to always try your WSDL in a
WSDL parser like:
1) Mono: wsdl <WSDL file>
2) C++/gsoap: wsdl2h <WSDL file>
Or perhaps have a look at this: http://jool.nl/new/
--
Hilsen/Regards
Michael Rasmussen
http://keyserver.veridis.com:11371/pks/lookup?op=get&search=0xE3E80917