R: [phpxmlrpc] Problem with xmlrpcval result of client response
Gaetano Giunta
giunta.gaetano at sea-aeroportimilano.it
Tue Nov 18 15:52:31 GMT 2003
Let's see if I get it straight...
>
> Hi there,
>
> Unfortunately I have a problem with the client lib "xmlrpc.inc":
>
> In the Documentation http://xmlrpc.usefulinc.com/doc/xmlrpcval.html
> I read:
> The elements of the array must be xmlrpcval objects themselves.
>
> Now, I do a request via $client->send,
> the serialized form looks like this:
> <methodResponse> <params> <param> <value><struct> =
> <member><name>displayName</name> <value><string>/</string></value> =
> </member> <member><name>dataType</name> =
> <value><string>resource</string></value> </member> =
> <member><name>size</name> <value><int>0</int></value> </member> =
> <member><name>parentUri</name> <value><string>/</string></value> =
> </member> <member><name>uri</name> <value><string>/</string></value> =
> </member> <member><name>folder</name> =
> <value><boolean>1</boolean></value> </member>
> <member><name>id</name> =
> <value><string>/</string></value> </member> </struct></value>
> </param> =
> </params> </methodResponse>
>
> The response contains an xmlrpcval whos value is an associative array,
> but the values of that array are NOT xmlrpcval objects but
> string/boolean/int.
>
> $response=$client->send(...);
(Quoted text is taken from the docs)
$response is "an instance of xmlrpcresp"
> $value=$response->value();
$value is "an xmlrpcval object containing the return value sent by the server"
Given the above xml snippet, I'd suspect it's type is "struct". To check it out:
$kind=$value->kindOf();
echo "VALUE IS OF KIND : $kind";
> $rpcval=$value->getval();
Here's the magic part: $rpcval is a PHP array!!!
It happens because the getval() function serves exactly this purpose: get rid of all xml-rpc objects cruft and easily transform xml-rpc objects into native php data types. Saves you lottsa coding on large nested arrays/structs.
I know it's not documented in the official docs, you have to look for it in the changelog.
If you just wanted to get the xmlrpc-objects out of your struct, you should have used:
list($key,$ value) = $value->structeach();
> gettype($rpcval['uri']) is string and not Object of xmlrpcval!!!
>
> THIS DOES NOT APPLY TO THE DOCUMENTATION.
>
False! (see above)
Plus you'r using an undocumented function...
For the rest of the original post, see if it still applies after reading the above and in case ask again :)
Ciao
Gaetano
More information about the phpxmlrpc
mailing list