XML RCP

http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/xmlrpc-howto-intro.html
をみて実際にためしてみた

>python
>>> import xmlrpclib
>>> server = xmlrpclib.Server("http://betty.userland.com/RPC2")
>>> server.examples.getStateName(41)
'South Dakota'
>>>
>groovysh
groovy> def serverProxy = new groovy.net.xmlrpc.XMLRPCServerProxy('http://betty.userland.com/RPC2')
groovy> println serverProxy.examples.getStateName(41);
groovy> go
South Dakota

へえ。
どんなデータがとんでくるのかしらべてみたら

groovy> def serverProxy = new groovy.net.xmlrpc.XMLRPCServerProxy('http://localost:10000/')
groovy> println serverProxy.examples.getStateName(41);
POST / HTTP/1.1
Content-Length: 184
Content-Type: text/xml
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.5.0_04
Host: localhost:10000
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
                <param><value><i4>41</i4></value></param>
        </params>
</methodCall>

なるほど。ISO-8859-1なのかい。
じゃあ日本語をおくってみるとばけちゃうのか?

groovy> def serverProxy = new groovy.net.xmlrpc.XMLRPCServerProxy('http://localost:10000/')
groovysh>println serverProxy.examples.getStateName("日本語はどうなるんだ");
POST / HTTP/1.1
Content-Length: 270
Content-Type: text/xml
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.5.0_04
Host: localhost:10000
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

<?xml version="1.0" encoding="ISO-8859-1"?>
<methodCall>
        <methodName>examples.getStateName</methodName>
        <params>
                <param><value><string>&#x65e5;&#x672c;&#x8a9e;&#x306f;&#x3069;&#
x3046;&#x306a;&#x308b;&#x3093;&#x3060;</string></value></param>
        </params>
</methodCall>

エンコードされるみているけどこれが仕様なのか?
Pythonはどうなのかみてみる。

>>> import xmlrpclib
>>> server = xmlrpclib.Server("http://localhost:10000")
>>> server.examples.getStateName("日本語")
POST /RPC2 HTTP/1.0
Host: localhost:10000
User-Agent: xmlrpclib.py/1.0.1 (by www.pythonware.com)
Content-Type: text/xml
Content-Length: 171

<?xml version='1.0'?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param>
<value><string>日本語</string></value>
</param>
</params>
</methodCall>

うーん。こんなんできちんと相互接続ができるのか?