スポンサードリンク


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.
      よっき プロフィール画像
      パソコンが大好きな青年。職業はプログラマ/SE。 フリーランスとしてウェブサイトの構築・保守の業務に従事。専門学校とパソコンスクールで講師も担当。幼少期からパソコンが大好きで、趣味がそのまま仕事に転じた。自作PCの魅力に惹かれたのは学生時代の頃。自作PC専門ブログで、お得な情報を紹介しています。

      スポンサードリンク


      コメントを残す




      CAPTCHA


      このページの先頭へ