[phpxmlrpc] Problem with xmlrpcval result of client response
Hohwiller, Joerg
j.hohwiller at t-online.net
Tue Nov 18 15:26:36 GMT 2003
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(...);
$value=$response->value();
$rpcval=$value->getval();
gettype($rpcval['uri']) is string and not Object of xmlrpcval!!!
THIS DOES NOT APPLY TO THE DOCUMENTATION.
Now when I receive a list of such objects, everything is fine:
<methodResponse> <params> <param> <value><array> <data> <value><struct>
= <member><name>displayName</name>
<value><string>/users</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>/users</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> <value><string>/users</string></value>
= </member> </struct></value> <value><struct> =
<member><name>displayName</name> <value><string>/groups</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>/groups</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> =
<value><string>/groups</string></value> </member> </struct></value> =
<value><struct> <member><name>displayName</name> =
<value><string>/actions</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>/actions</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> =
<value><string>/actions</string></value> </member> </struct></value> =
<value><struct> <member><name>displayName</name> =
<value><string>/files</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>/files</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> <value><string>/files</string></value>
= </member> </struct></value> <value><struct> =
<member><name>displayName</name> =
<value><string>/history</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>/history</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> =
<value><string>/history</string></value> </member> </struct></value> =
<value><struct> <member><name>displayName</name> =
<value><string>/workspace</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>/workspace</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> =
<value><string>/workspace</string></value> </member> </struct></value> =
<value><struct> <member><name>displayName</name> =
<value><string>/workingresource</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>/workingresource</string></value> </member> =
<member><name>folder</name> <value><boolean>1</boolean></value> =
</member> <member><name>id</name> =
<value><string>/workingresource</string></value> </member> =
</struct></value> </data> </array></value> </param> </params> =
</methodResponse>
My problem is not, that the result does not apply the documentation, but
that it is sometimes right and somtimes not.
class Resource {
var $id;
var $displayName;
var $parentId;
var $size;
var $isFile;
var $isLocked;
function Resource($rpcval) {
//LOOK HERE
//what to do here???
//sometimes I would need this
$this->id=$rpcval['uri'];
//and sometimes this...
//$this->id=$rpcval['uri']->getval();
//LOOK HERE
$this->displayName=$rpcval['displayName'];
$this->parentId=$rpcval['parentUri'];
$this->size=$rpcval['size'];
$this->isFile=$rpcval['file'];
$this->isLocked=$rpcval['locked'];
}
//...
}
class ResourceList {
var $itemList=array();
function ResourceList($rpcval=0) {
if (is_array($rpcval)) {
for ($i=0; $i<sizeof($rpcval); $i++) {
$this->add(new Resource($rpcval[$i]));
}
}
}
//...
}
Take care, and thank you
Kind regards
Joerg Hohwiller
More information about the phpxmlrpc
mailing list