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