「Apache POI (3.8 final) migrated to JDK 1.4」をリリースしました。

http://sourceforge.jp/projects/poi-jdk14/

今回は、Excel だけでなく、Word, PowerPoint など、
すべての API を移植しました。

JDK 1.5 から 1.4 への移植のノウハウ)

忘れないうちに、JDK 1.4 への移植のノウハウを記載しておきます。
(こういう移植のケースはあまりないと思いますが、参考までに。)

ジェネリクスをすべて削除する。(ソース全体を正規表現で置換。)
	Set --> Set
	List --> List
	Map --> Map
アノテーションをすべて削除する。(ソース全体を正規表現で置換。)
	@Override --> 削除
JDK 1.5 で簡略化された for 文を元の古い書き方に直す。(手作業。Eclipseのインテリセンスで雛形作成。)
	(修正前)
	for (Record r : records) {

	(修正後)
	for (Iterator iterator = records.iterator(); iterator.hasNext();) {
		Record r = (Record) iterator.next();
キャストを追記する。(手作業。Eclipseの自動訂正候補が補完。複数候補が出たときは要注意。)
	(修正前)
		Record r = iterator.next();

	(修正後)
		Record r = (Record) iterator.next();
JDK 1.4 にはオートボクシング機能がないので、型をあわせる。(手作業。確実に型をあわせる。)
	(修正前)
	int i = new Integer(10);

	(修正後)
	int i = new Integer(10).intValue();
	または
	Integer i = new Integer(10);
Integer クラス(他に Byte, Short, Long, Double)の valueOf() メソッドはないので、new Integer() に変換する。(ソース全体を正規表現で置換。)
	Integer.valueOf(i) --> new Integer(i)
	Long.valueOf(i) --> new Long(i)
	Double.valueOf(i) --> new Double(i)
JDK 1.4 には enum がない。しかし class と static な変数を使って書き直すと、enum と同じ働きをする。(正規表現で置換。必要に応じて手直し。)
	(修正前)
	public enum LayoutMode {
		EDGE,
		FACTOR
	}

	(修正後)
	public class LayoutMode {
		public static final LayoutMode EDGE = new LayoutMode();
		public static final LayoutMode FACTOR = new LayoutMode();
	}
Comparator インターフェースが implements されているクラスの compare メソッドの引数を Object 型に直す。(手作業。)
	(修正前)
		public int compare(String a, String b) {

	(修正後)
		public int compare(Object in_a, Object in_b) {
			String a = (String) in_a;
			String b = (String) in_b;
JDK 1.4 では Exception クラスのコンストラクタの引数として Exception オブジェクトを渡せないので、エラーメッセージを渡す。(手作業。)
	(修正前)
		throw new RuntimeException(e);

	(修正後)
		throw new RuntimeException(e.getMessage());
別々のクラスで static な変数どうしを参照した場合、JDK 1.5 では問題はおきないが、JDK 1.4 では変数の値が NULL になるので、参照ではなくお互いに new する。(手作業。)
足りないクラスやメソッドは自作する。入念なユニット試験を行う。
大原則として、ロジックを変更しない。

(あとかぎ)

2012-03-26 に POI 3.8-FIANL がリリースされたので、
移植しようかどうか、迷っていましたが、
POI 3.7-FINAL の不具合として
Excelファイルを編集すると、たまにファイルを読み込めなくなる問題(再現性あり)」が
POI 3.8-FINAL で解消されていたため、勉強もかねて移植を決めました。

昨年同様、ゴールデンウィークの4月末から JDK 1.4 への移植を始めました。
休みの日を使い、2012-05-20 になって、なんとかリリースできました。

前バージョンの POI 3.7 とは違い、想定していたよりも修正ファイルが多く、
途中で投げ出しそうになりましたが、POI 3.7 JDK 1.4 をリリースした責任もあり、
きっと役に立つことを期待して、完成までこぎつけました。

なお、移植作業は今バージョンの POI 3.8-FINAL を最後にします。
さすがに数年後に JDK 1.4 で動いているサーバーはかなり少数と思われますし、
POI 3.7-FINAL に比べて POI 3.8-FINAL は大分安定していますので。

あと、どうなんでしょう?
このライブラリ、日本よりも海外で利用されている気が。。
きっと古いサーバー環境で頑張っているんだろうなー。