ExtractorやMimeTypeHelperとか

今まで、pdf とか word からのテキスト抽出とか自前で実装してきたのだけど、Apache の Tika を見たら、Extractor と同じことをやるみたいで調査をしてみた。Tika に対抗して、自前で作るかと思ったのだけど、TIka をざっくりと見てみると、結構、いろいろとやっている…。オーディオファイルも対象にしたりといろんなフォーマットを読み込めるようだ。MimeTypeの判定もファイル名の拡張子だけでなくて、ファイルの中身までも見ているよ…。というわけで、Tika をラップして DI できるようにした方が賢いと思い始める今日この頃。ZipExtractor とかいろいろと作ったのだけどね…。

バッチファイルからの出力が多い場合止まる

https://www.seasar.org/issues/browse/DBFLUTE-536 で対応したのだけど、ProcessBuilder にがんがん改行&フラッシュとか返しちゃよくないみたい。今まで、実行しているバッチ(jdbc.batとか)から返ってくる各行で \n を返していたのだけど、行数が多いと flush ができない感じだった。というわけで、各行で送るのはやめて、ユーザーが入力したものをそのままバッチに渡るように変更してみた。これで問題自体は直ったけど、replace-schema でバッチに y をうまく送ることができず(シェルのreadから-pの文字列がこない…bash のソースも見たのだけど、strerrに渡してくれているから取れる気がするのだけど取れん。これ以上調べるのは重すぎるからやめておく…)。そんなわけで、replace-schema は環境変数で処理してくれるみたいだから、それを使ってうまく動くようにしておいた。

リクエストエンコーディングの設定

Mobyletでは、EncodingFilterの代わりにMobyletFilterを使うことになるが、MobyletFilterでも基本的にはエンコーディングの設定は同じで、

<filter>
<filter-name>mobyletfilter</filter-name>
<filter-class>jp.sf.fess.filter.FessMobyletFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>

みたいな感じ。コード的には、MobyletFilter の以下のメソッドで設定されることになる。というわけで、何も指定しなければ、windows-31j だね。

protected void initDefaultCharset(FilterConfig filterConfig) {
String defCharsetName = null;
if (filterConfig != null &&
(defCharsetName =
filterConfig.getInitParameter("encoding")) != null) {
Charset defCharset = Charset.forName(defCharsetName);
if (defCharset != null) {
SingletonUtils.put(defCharset);
}
}
if (SingletonUtils.get(Charset.class) == null) {
SingletonUtils.put(Charset.forName(DefCharset.WIN31J));
}
}