先日のAmazon ECSを検索するサンプルクラスですが、いろいろと問題が。

まず、致命的なところでは、このクラスItemSearchとItemLookupに対応しているつもりなのに、ItemLookup時のエラー応答がハンドリングできていない。

xpath = "ItemSearchResponse/Items/Request/Errors/Error"

というXPathでエラー応答があるかどうかをチェックして、エラーの場合はコードとメッセージを取得しているのだが、ItemSearchをハードコード(死)

xpath = "#{@response_node_name}/Items/Request/Errors/Error"

こうだった。

また、このクラスはlibディレクトリの下において、Controller/Helper/Modelとは別扱いにしたのだが、そうするとloggerオブジェクトも使えなくて困った。上記のエラーコードとメッセージをlogger.warn()しておきたかった訳です。

しかしよく考えると、Controller/Helper/Moddelからloggerオブジェクトをいつでも使えると言うことは、loggerはクラスメソッド扱いか。明示的にクラス名を指定して

@error_code = element.text('Code') @error_message = element.text('Message') ApplicationController.logger.warn 'error_code: ' + @error_code ApplicationController.logger.warn 'error_message: ' + @error_message

でOKだった。