N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

Maven2: MXParser改造中

2006-01-05 01:54:35 | オープンソース
あけましておめでとうございます
私はお正月は自宅に完全に引き籠ってMaven2のi18nの問題の調査に
明けくれていました。他にやらなきゃいけないことが沢山あるのに、、

手始めにMaven2でXMLのパースの処理を引き受けているMXParserという
クラスに文字エンコーディングの自動検出機能をつける、という作業に
チャレンジしてみました。

Maven2が抱えているi18nの問題の、多分68%くらいはこのMXParserが
xml宣言のencoding指定を見事に無視してくれるところが原因といって
良いでしょう。

まだテストが足りないですが、一応なんとなく動くようになったので、
こちらに置いておきます。興味があるという奇特な方、
もしおられましたらぜひ中身をチェックしてコメント下さい。
まだ外部から明示的にエンコーディング指定した時の動作とかがいまいちです。

実装にあたっては、xercesのソースコードを参考にしました。
EncodingMap.javaとかはまんまxercesのパクリです。
RewindableInputStream.javaというクラスもxercesのなかに似たようなのが
あるのですが、うまく再利用できなさそうだったので、思いきって書き直して
ます。xercesのソースコードを初めて真剣に読んでみてわかったことは、
「意外とソースが汚い」ということです。使われてないとみられる変数やら
メソッドが結構あって苦戦しました。

UCS-4とUCS-2はSunのJDKではサポートされていないっぽかったので、
UnsuppoeredEncodingExceptionを投げるようにしてしまっています。
xercesでもUCSReaderというクラスを独自に作ってなんとかしてます。
MXParserはもともとXML仕様完全準拠を狙ったものでは無いでしょうから、
そこまでは必要ないと判断しました。

手元の環境では、UTF-16 ビッグエンディアン Byte Order Markあり、
Shift_JIS, EUC-JP, UTF-8の4つのエンコーディングで、簡単なXMLが正常に
読みこまれることを確認しています。

ところで、MXParserの"MX"って何でしょうね?