スポンサードリンク


Seasar2のJavaライブラリS2CSVが便利すぎ!使い方と自動コンポーネント登録方法!

seasar2のフレームワークで「S2CSV」というライブラリがあります。
使ってみたところ、すごく便利でした。

Javaに限らず普通にプログラムでCSVファイルを操作する際は、
Fileクラス使ってストリーム取得して、カンマの位置や行数判定など面倒な処理をコーディングしないといけません。

正直なところCSVファイルのインポート・エクスポートの要件のある
業務システムの開発は嫌いだったりします。

CSVの書式だのヘッダ行だのエラー処理に追われて無駄な工数をかけてしまうからですね。

 

S2CSV」はCSV操作に特化したものなので、そういった無駄を解決してくれます。

S2CSVの導入にあたっていろいろ迷った点などありましたので、
覚え書き程度に書いておこうと思います。

 

seasar2のS2CSVってどんなライブラリ?

S2CSV 使い方

CSVファイルを操作・制御するためのJavaライブラリです。

サーブレットでCSVのアップロードやダウンロード処理を実装する際に活躍します。

 

CSVファイルの入出力処理はもちろんのこと、
データベースに直接CSVデータを登録・更新・削除ができます。

自動で入力チェックを行なってくれるバリデーション機能も実装されているので、
頻繁にCSVファイルを利用する業務システムには欠かせないでしょう。

 

開発の要件としてあったのが、クライアント側からアップロードしたCSVをサーバ側で処理して、
そのままCSVデータをエンティティーを通してデータベースに登録してしまう処理。

すべてS2CSV導入で簡単に解決できました。

 

セットアップ・準備

JARファイルの登録

  • http://s2csv.sandbox.seasar.org/ を開く。
  • 「ダウンロード」ページの「s2csv-0.0.2-sp1.zip」をダウンロードし解凍。
  • 中身の「s2csv-0.0.2-sp1.jar」をC:¥resin-pro¥webapps¥{APP}¥WEB-INF¥libに配置。
  • eclipseの「プロジェクトエクスプローラー」でS2CSVを利用したいプロジェクトを右クリックし「プロパティ」。
  • Javaのビルド・パス」の「ライブラリー」タブを開く。
  • 「ライブラリーの追加」ボタンをクリックし「ユーザー・ライブラリー」を選択。
  • 「ユーザー・ライブラリー」ボタンをクリックし「新規」ボタンクリック。
  • 「ユーザー・ライブラリー」名を「S2CSV」と指定する。
  • アイコンが一覧に追加されたら「JARの追加」で3.のJARファイルを選択。
  • 「ライブラリーの追加」ウィンドウで「S2CSV」を追加する。
  • 「OK」ボタンをクリックするとプロジェクト内で「S2CSVライブラリ」が使用できるようになります。

diconファイルの記述

C:¥resin-pro¥webapps¥{^APP}¥WEB-INF¥classesを開く。

 app.dicon」に以下を追記。

 

 creator.dicon」に以下を追記。

(補足) CsvCretorクラスをDIさせることにより、{固有名}Csvクラスが自動でコンポーネント登録されます。

 

 customizer.dicon」に以下を追記。

 

CSVバリデータ用メッセージプロパティ

CSVのバリデーション機能を使用する為に専用のメッセージプロパティファイルを用意します。
準備していないと「CSVValidateResult」クラスのエラーメッセージ取得時に例外が発生します。

ResourceNotFoundRuntimeException

[ESSR0055]リソース(csv_application)が見つかりません

この例外を出さない為にも「メッセージプロパティ」ファイルを正しく配置しておきます。

  • http://s2csv.sandbox.seasar.org/ を開く。
  • 「ダウンロード」ページの「s2csv-tutorial.zip」をダウンロードし解凍。
  • 中身の「target¥classes¥csv_application_ja.properties」をeBuilderの
    「src/main/resources」にコピーする。

 

以上で基本的なS2CSVライブラリのセットアップ作業は完了です。

eclipseのエディタでS2CSV関連のクラスモジュールの呼び出しができますよ。

 

S2CSVの導入にあたって苦労した点

SS2CSV コンポーネント

s2csvのjarファイルの配置場所を間違えた

基本的に外部ライブラリをウェブサーバにセットする場合は、
サーバディレクトリ内の「lib」フォルダに格納してあげるだけですが、s2csvのjarを入れてもサーバエラーになってしまいしました。

と、よくみたら格納先の「lib」フォルダが間違っていました。

最初ウェブサーバの直下の「lib」に配置していましたが、
正しくはアプリケーションディレクトリ側「lib」フォルダでした。(WEB-INF配下)

普通にseasar2のマニュアルにも明記されていることに後になって気づきました。

 

CSVクラスのコンポーネントの呼び出しに失敗しました

eclipseでs2csvの機能を利用して、CSV読み込みをしようとしたら、
なぜかコンポーネントエラーでCSVのデータがパースできませんでした。

と、こちらも私の勘違いによる不手際だったんですが、
結論から言うと、パースしようとしたクラス名の名称の末尾が「CSV」になっていました。

そりゃ動かないですよ。

 

S2CSVの仕様でcreator.diconに記述したCsvCreatorクラスは、
{^固有名}Csv.classという名称のクラスしか自動コンポーネントされません。

私の場合、例えばSampleCsv.javaと指定しないといけないのに、
SampleCSV.javaというクラス名で定義していました。

確かに「org.seasar.s2csv.creater.CsvCreator」の内部のソースを見ると、
prefix(“Csv”)とあり、コンポーネント自動登録の予約語として記述されています。

 

スポンサードリンク

 

CSVクラスの定義方法

クラス名のプレフィックスは必ず「Csv」にします。

クラスに対して「CSVEntityアノテーション」を実装し、CSVファイルにヘッダ行を含めるか指定します。
フィールド変数値にはCSV入出力時に使用する属性値を必要に応じて定義します。

但し、CSVColumnアノテーションの「columnIndex」は
CSVファイルの列位置を表す属性なので記述必須です。ないとエラーします。

 

S2CSVでCSVの入出力とバリデート

CSVファイルをパースして中身のデータを取得

ブラウザ上からCSVファイルをPOSTしてサーバ上にアップロードする処理は割愛します。

予めサーバ側にCSVファイルが配置されている前提のサンプルコードです。

 

バリデート処理とエラーメッセージの定義

 

クラスオブジェクトからCSVファイルに出力

The following two tabs change content below.
よっき
パソコンが大好きな青年。職業はプログラマ。 幼少期からパソコンが好きで、趣味がそのまま仕事になりました。 主にウェブ系コンテンツの開発が中心です。 自作PCの魅力に惹かれたのは学生時代の頃で、現在に至ります。 自作PC専門ブログで、お得な情報を紹介しています。 趣味はホームページ制作かな。起業を夢見て奮闘中の毎日!

スポンサードリンク


コメントを残す




*

このページの先頭へ