先日の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だった。