PharoでXMLRPCを使う。

来るべき日に備えてPharoにXMLRPCを導入する。

http://code.google.com/p/pharo-xmlrpc/ より)

まずは、Configurationを取得する。

(Smalltalk at: #Gofer) new
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfXMLRPC';
load.

Configurationを使っていろんなタイプ(クライアントのみとかサーバー付きとか)が選べる。以下のうち1つを選んでワークスペースに入力し、評価すれば後は勝手にインストールされる。

クライアントのみの場合

ConfigurationOfXMLRPC project latestVersion load: 'Client'.

テスト付きのクライアントの場合

ConfigurationOfXMLRPC project latestVersion load: 'Client with Tests'.

クライアント+サーバの場合

ConfigurationOfXMLRPC project latestVersion load: 'Server'.

テスト付きのクライアント+サーバの場合

ConfigurationOfXMLRPC project latestVersion load: 'Server with Tests'.

とりあえず全部?の場合

ConfigurationOfXMLRPC project latestVersion load: 'All'.

当面の目的においてはクライアントのみでOKなので、テスト付きクライアントを取得した。

ところが、wikiにあるサンプル( http://code.google.com/p/pharo-xmlrpc/wiki/Samples )を実行しようとするとエラーになる。XMLRPCDecoderがおかしいらしい。

XMLRPCDecoder>>decodeStruct:を以下のようにすると、うまくいった。

decodeStruct: xml
"Decode the Struct."
| rv |
rv := Dictionary new.
xml elements
do: [:eachNode | rv
at: (eachNode elementAt: 'name') contentString
put: (self
decode: (eachNode elementAt: 'value'))].
^ rv

要はノードの分解を余計にやってしまったことがエラーの原因らしい。これでサンプルもちゃんと動くようになると思ったけど、認証の関係でエラーが返ってきた。でもやりとりは成功しているらしいので良しとする。