「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 への移植のノウハウを記載しておきます。
(こういう移植のケースはあまりないと思いますが、参考までに。)
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());
足りないクラスやメソッドは自作する。入念なユニット試験を行う。
大原則として、ロジックを変更しない。
(あとかぎ)
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 は大分安定していますので。
あと、どうなんでしょう?
このライブラリ、日本よりも海外で利用されている気が。。
きっと古いサーバー環境で頑張っているんだろうなー。