GroovyからJavaのクラスを利用する

Groovy(http://groovy.codehaus.org/)というScript言語を使ってJavaで書かれたRSSフィードを操作するInforma(http://informa.sourceforge.net/)というライブラリを使いたいと思います。

Groovyとは、RubyPythonにインスパイアされ開発された、Javaに似た構文を持つScript言語です。

1. Groovyをインストールする
  Groovy(http://groovy.codehaus.org/)のサイトから最新版をダウンロード
  解凍してできたファイルを以下のディレクトリに移動する
   ・C:\soft\java\groovy\1.0-JSR-06
  
  このとき、以下の環境変数を設定しておくと便利です
   set GROOVY_HOME=C:\soft\java\groovy\1.0-JSR-06
   set PATH=%PATH%;%GROOVY_HOME%\bin
   ※ この他にJAVA_HOMEが設定されている必要があります

2. Informaを利用する準備をする
  Informa(http://informa.sourceforge.net/)の最新版をダウンロード
  今回は以下の3つのJARを利用する
   ・informa.jar
   ・jdom.jar
   ・commons-logging.jar

3. まず、JavaからInformaを使ってみる
 サンプルを実行する前に、「2」のJARファイルがクラスパスに通っている必要があります

================================================================
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;

import de.nava.informa.core.ChannelIF;
import de.nava.informa.core.ItemIF;
import de.nava.informa.core.ParseException;
import de.nava.informa.impl.basic.ChannelBuilder;
import de.nava.informa.parsers.FeedParser;

public class ReadRSS {

    public static void main(String[] args) {
        try {
            URL url = new URL("http://feed.japan.cnet.com/rss/news/index.rdf");
            ChannelIF channel = FeedParser.parse(new ChannelBuilder(), url);
           
            System.out.println("=============================================");
            System.out.println("title : " + channel.getTitle());
            System.out.println("description : " + channel.getDescription());
            System.out.println("language : " + channel.getLanguage());
            System.out.println("=============================================");
           
            Collection<ItemIF> c = channel.getItems();
            for (ItemIF item : c) {
                System.out.println(item.getTitle());
                System.out.println("     " + item.getLink());
                System.out.println("     " + item.getDate());
                System.out.println("     " + item.getDescription());
            }
           
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}
================================================================


4. GroovyからInformaを利用する
 「3」と同様にJARファイルへクラスパスを通しておく必要があります。
 
 以下のように実行する
 > set LIB=C:\soft\java\groovy\1.0-JSR-06\sample
 > set CLASSPATH=%LIB%\informa.jar;%LIB%\jdom.jar;%LIB%\commons-logging.jar;
 > groovy sample.groovy

以下のサンプルは「3」でJavaからInformaを利用した場合と同じ内容を表示する
================================================================
import java.net.URL
import java.util.Collection

import de.nava.informa.core.ChannelIF
import de.nava.informa.core.ItemIF
import de.nava.informa.impl.basic.ChannelBuilder
import de.nava.informa.parsers.FeedParser

url = new URL("http://feed.japan.cnet.com/rss/news/index.rdf");
channel = FeedParser.parse(new ChannelBuilder(), url);

println "title : " + channel.getTitle()
println "description : " + channel.getDescription()
println "language : " + channel.getLanguage()

c = channel.getItems()
for (item in c) {
    // 文字列の中に変数を記述する
    println "    ${item.getTitle()}"
    // getterを省略して書いてみる
    println "        ${item.description}"
}
================================================================

ここ最近、Script言語が注目を集めています。
時期JDKにもJavaScriptが実装され、その次のバージョンでは、このGroovyも追加される予定になっています。
他にも、Script言語はたくさんあり、いずれJVMの上で動くようになるのかも知れません。

今回の例のようにGroovyは既存のJavaクラスを利用することができるので、他のScript言語より多くのアドバンテージをもっているような気がします。
が、他のScript言語も触ってみてどちらが扱いやすいか試してみる必要があると思います。