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

_______________________________________________
phpxmlrpc mailing list
[EMAIL PROTECTED]
http://lists.usefulinc.com/cgi-bin/mailman/listinfo/phpxmlrpc

Reply via email to