今まで、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)); } }