ROMEを試してみた

JavaRSSAtomを使うためのライブラリROMEを使ってみた。

マイコミの「JavaでAtomやRSS等のフィードを扱うならこれ! - ROME」にサンプルコードがある。
# コード自体は記事で確認してほしい

軽い気持ちで記事などで紹介されているコードを動かそうとすると、かなりの確率で動かない。もちろん記事の通り設定しているにも関わらず。

インストール作業は特に必要ない。ダウンロードしたアーカイブを展開すると、JARファイル(ROMEはrome-0.9.jar、ROME Fetcherはrome-fetcher-0.9.jar)が入手できるので、これらにクラスパスを通してコンパイル/実行を行えばよい。

というわけで、記事の通りやるとこんな感じ。

Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/JDOMParseException
	at com.sun.syndication.io.SyndFeedInput.<init>(SyndFeedInput.java:57)
	at com.sun.syndication.io.SyndFeedInput.<init>(SyndFeedInput.java:47)
	at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.readSyndFeedFromStream(HttpURLFeedFetcher.java:269)
	at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.getSyndFeedFromStream(HttpURLFeedFetcher.java:273)
	at com.sun.syndication.fetcher.impl.HttpURLFeedFetcher.retrieveFeed(HttpURLFeedFetcher.java:146)
	at Sample01.main(Sample01.java:24)

jdomもいるんだろうなぁ。
というわけでjdomをクラスパスに追加したらちゃんと動いた。


まずはこのblogのRSSを取得してみた。
toString()がちゃんと実装されているので

System.out.println(entry.toString());

と書けば、エントリーの中身が丸ごと見える。

SyndEntryImpl.updatedDate=null
SyndEntryImpl.contributors=null
SyndEntryImpl.title=[Java]Servlet Filter
SyndEntryImpl.categories=[]
SyndEntryImpl.publishedDate=Wed May 23 01:19:22 JST 2007
SyndEntryImpl.link=http://d.hatena.ne.jp/j7400157/20070523#1179850762
SyndEntryImpl.authors=null
SyndEntryImpl.modules[0].descriptions=[]
SyndEntryImpl.modules[0].creators[0]=j7400157
SyndEntryImpl.modules[0].contributors=[]
SyndEntryImpl.modules[0].title=null
SyndEntryImpl.modules[0].relations=[]
SyndEntryImpl.modules[0].publisher=null
SyndEntryImpl.modules[0].date=Wed May 23 01:19:22 JST 2007
SyndEntryImpl.modules[0].languages=[]
SyndEntryImpl.modules[0].titles=[]
SyndEntryImpl.modules[0].rightsList=[]
SyndEntryImpl.modules[0].interface=interface com.sun.syndication.feed.module.DCModule
SyndEntryImpl.modules[0].subjects[0].value=Java
SyndEntryImpl.modules[0].subjects[0].interface=interface com.sun.syndication.feed.module.DCSubject
SyndEntryImpl.modules[0].subjects[0].taxonomyUri=null
SyndEntryImpl.modules[0].contributor=null
SyndEntryImpl.modules[0].sources=[]
SyndEntryImpl.modules[0].types=[]
SyndEntryImpl.modules[0].type=null
SyndEntryImpl.modules[0].rights=null
SyndEntryImpl.modules[0].publishers=[]
SyndEntryImpl.modules[0].formats=[]
SyndEntryImpl.modules[0].dates[0]=Wed May 23 01:19:22 JST 2007
SyndEntryImpl.modules[0].language=null
SyndEntryImpl.modules[0].identifiers=[]
SyndEntryImpl.modules[0].creator=j7400157
SyndEntryImpl.modules[0].coverage=null
SyndEntryImpl.modules[0].uri=http://purl.org/dc/elements/1.1/
SyndEntryImpl.modules[0].description=null
SyndEntryImpl.modules[0].identifier=null
SyndEntryImpl.modules[0].subject.value=Java
SyndEntryImpl.modules[0].subject.interface=interface com.sun.syndication.feed.module.DCSubject
SyndEntryImpl.modules[0].subject.taxonomyUri=null
SyndEntryImpl.modules[0].relation=null
SyndEntryImpl.modules[0].source=null
SyndEntryImpl.modules[0].format=null
SyndEntryImpl.modules[0].coverages=[]
SyndEntryImpl.links=[]
SyndEntryImpl.contents[0].value=
		<div class="section">
			<blockquote>
			<p>mod_rewriteを使えば既存のWebアプリケーションに大きな修正を加えずに、後者のようなアクセシビリティの高いURLを提供することができる。また、サーバ上でWebサイトのフォルダ構成を変更した場合などもmod_rewriteを使用することで変更前のURLから変更後のURLへ転送するといったことが可能だ。</p>
			<p>これと同様のことをJavaベースのWebアプリケーションで実現するのが"Url Rewrite Filter"だ。Url Rewrite FilterはBSDライセンスで提供されるオープンソースソフトウェアで、商用サポートも用意されている。</p>
			<br>

			<p><a href="http://journal.mycom.co.jp/articles/2007/05/21/urlrrewrite/index.html" target="_blank">Java WebアプリでもわかりやすいURLを! - Url Rewrite Filterの使い心地</a></p>
			</blockquote>
			<p>これけっこうすごいなぁ。Apache+Tomcat環境で mod_rewrite 使うとどうなるのかなぁ、とかを最近考えていたので。</p>
			<p>でもApache+Tomcat+これ、だとどんな動きになるんだろう・・・。</p>
			<p>Servlet Filterをあまり使ったことがないけど、けっこうすごいなと思っている。</p>
			<p>JIS2004対策に使ったり、特定のケースだけにgzip圧縮をさせたりとかもできるし。</p>
		</div>

SyndEntryImpl.contents[0].type=html
SyndEntryImpl.contents[0].interface=interface com.sun.syndication.feed.synd.SyndContent
SyndEntryImpl.contents[0].mode=null
SyndEntryImpl.enclosures=[]
SyndEntryImpl.titleEx.value=[Java]Servlet Filter
SyndEntryImpl.titleEx.type=null
SyndEntryImpl.titleEx.interface=interface com.sun.syndication.feed.synd.SyndContent
SyndEntryImpl.titleEx.mode=null
SyndEntryImpl.uri=http://d.hatena.ne.jp/j7400157/20070523#1179850762
SyndEntryImpl.interface=interface com.sun.syndication.feed.synd.SyndEntry
SyndEntryImpl.description.value= mod_rewriteを使えば既存のWebアプリケーションに大きな修正を加えずに、後者のようなアクセシビリティの高いURLを提供することができる。また、サーバ上でWebサイトのフォルダ構成を変更した場合などもmod_rewriteを使用することで変更前のURLから変更後のURLへ転送すると
SyndEntryImpl.description.type=text/plain
SyndEntryImpl.description.interface=interface com.sun.syndication.feed.synd.SyndContent
SyndEntryImpl.description.mode=null
SyndEntryImpl.foreignMarkup[0]=[Element: <content:encoded [Namespace: http://purl.org/rss/1.0/modules/content/]/>]
SyndEntryImpl.author=j7400157

いい感じじゃない。


RSSのライブラリはいろいろ試してみたけど、どれもいまいちだった。
RSS4JはRSS2.0に対応していない。
Jakarta Feed Parserはイベントドリブンな実装らしく、めんどう。
Infomaは更新状況がいまいち。
# 半年くらい前に試した結果だけど。


これまでは、一応ちゃんと動くInfomaを使っていたが、これからはROMEにしよっと。