[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