サンプルをめぐる冒険
冒険ではないな。
そりゃ良いとして、RSS Reader ですが動きません。
プロジェクト作成→サンプルソースを盛り込むという流れがあまりに微妙で (これは作成者が微妙な事に起因しとりますが)、な事も原因の一つなのかもしれませんが、きちんと検証できてないので何が原因かは不明。
ただ、ソースを眺めるに @IT のサンプルと微妙に異る部分も発見。
こちらは RSS Reader なサンプルにおける Web サービスとのやりとり (ちなみに動作確認において例外が発生しているのが以下の処理になってます)
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); conn.setDoInput (true); conn.setUseCaches (false); conn.setDefaultUseCaches (false); InputStream is = conn.getInputStream (); this.result = new LinkedList(); SAXParser parser = SAXParserFactory.newInstance().newSAXParser(); parser.parse (is, this);
こちらは @IT の例
java.net.URL url = new java.net.URL(requestParam); java.net.HttpURLConnection urlCon = (java.net.HttpURLConnection)url.openConnection(); try { org.xml.sax.InputSource ins = new org.xml.sax.InputSource(urlCon.getInputStream()); javax.xml.parsers.SAXParserFactory fact = javax.xml.parsers.SAXParserFactory.newInstance(); javax.xml.parsers.SAXParser parser = fact.newSAXParser(); YahooImageSearchResultHandler handler = new YahooImageSearchResultHandler(resultSet); parser.parse(ins, handler); } finally { urlCon.getInputStream().close(); urlCon.disconnect(); }
一番大きな違いとしては、RSS Reader は DefaultHandler を継承したクラスのメソドである事に対して @IT の例は、GWT サーバクラスのメソドになっている点かなぁ。
なので、parser.parse の第二引数が RSS Reader な例は this で OK だけど、@IT の例はオブジェクトを生成しなければならない、と。
ただ、微妙なのは parse.parse の第一引数。
RSS Reader の例では HttpURLConnection の属性を設定した後に InputStream なオブジェクトを作っていますが、@IT の例では org.xml.sax.InputSource なオブジェクトを生成している。
もう少し精査が必要なんですが、これが原因とは思えんなぁ。
とりあえず類推の世界なんで、実際に動作確認をきちんとしてから、だとは思うんですが、もう少しデバッガなんかできちんと追いかける環境が (以下略