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