[Gambas-user] XMLRpc maybe a Bug
Ron
ron at ...1740...
Tue Mar 3 09:10:17 CET 2009
Sent it tonight, and still don't see it on the list, so reporting the
bug fix again. See below.
Peter Lang wrote:
> Hi,
>
> After investigating the Source of xmlrpc i thought i know how to use it...
> Everything work so far, but the last Step does not work.
> The line: myStruc.Value(a) has to return the result, but instead of giving
> back an int i get an RpcStruct again and again.
>
> The sample does not much useful, but when it ends it throws the following
> Errors to the Console:
> WARNING: circular references detected
> RpcStruct (1)
> WARNING: 9 allocation(s) non freed.
>
> Is there any additional Documentation i missed?
Peter and all,
I think I may have found the problem, it looks like a bug in the
gb.xml.rpc component.
BUT i'm not a xml guru nor a gambas component wizard, so it could be a
bogus fix, and break things.
Anyway with this change your example code works without errors and
returns the correct values as well ;-)
I have added some debug statements to your code to prove this, see below.
Just change line 194 in "gambas/2.0/gb.xml/src/rpc/gb.xml.rpc/Tools.module"
from:
hAtom.Data.Add(Name, hAtom.Data, hAtom.Type)
to:
hAtom.Data.Add(Name, bAtom.Data, bAtom.Type)
It looks like two typos to me...
Then type sudo make install from dir "gambas/2.0/gb.xml/src/" to install it.
Run code:
---
' Gambas module file
PUBLIC SUB Main()
DIM RpcF AS RpcFunction
DIM myStruc AS RpcStruct
DIM client AS RpcClient
DIM hVar AS NEW Variant[]
DIM ret AS Variant
DIM a AS Integer
DIM name AS String
DIM dType AS Integer
a = 0
RpcF = NEW RpcFunction("sample.sumAndDifference", [XmlRpc.xInteger,
XmlRpc.xInteger], XmlRpc.xStruct)
client = NEW RpcClient(RpcF)
client.URL = "http://xmlrpc-c.sourceforge.net/api/sample.php"
hVar.Add(5)
hVar.Add(3)
myStruc = client.Call(hVar)
DO WHILE a < myStruc.Count
name = myStruc.Key(a)
dType = myStruc.dataType(a)
ret = myStruc.Value(a)
DEBUG "Name = " & name
DEBUG "Type = " & dType
DEBUG "Value = " & ret
INC a
LOOP
END
It returns:
MMain.Main.28: Name = sum
MMain.Main.29: Type = 0
MMain.Main.30: Value = 8
MMain.Main.28: Name = difference
MMain.Main.29: Type = 0
MMain.Main.30: Value = 2
;-)
Regards,
Ron_2nd.
More information about the User
mailing list