JASMP

JavaでSwiftメッセージ
「Java API for Swift Message Processing」(JASMP)は、JavaでXMLを扱う、SAXやDOMのようにSwiftメッセージを扱うためのAPIです。オープンソースで公開することで、SWIFTメッセージを扱うシステムを開発しやすい環境にすることを目的としています。

APIの使い方
JavaDoc

jasmp.jarの使い方
以下のようにSAX同様に自作ハンドラを作成して、パーサに渡すだけです。サンプルソースは、標準ハンドラであるCreateDomHandlerを使用しています。

ハンドラの作り方
ハンドラクラスのサンプルは以下です。

 
package jp.co.atomsware.swift.helpers;

public class DefaultHandler implements HadlerBase {

private static final String CRLF = "\n";
 private StringBuilder buffer = new StringBuilder();

 /**
  * デフォルトコンストラクタ
  */
 public DefaultHandler() {
 }

 /**
  * ISO15022電文の開始
  *
  * @param line
  *            ファイル内の行数
  * @param pos
  *            行内の位置
  */
 public void startDocument(int line, int pos) {
     buffer.append(line + ":\t");
     buffer.append("startDocument()").append(CRLF);
 }

 /**
  * BLOCKの開始
  *
  * @param level
  *            階層
  * @param line
  *            ファイル内の行数
  * @param pos
  *            行内の位置
  * @param blockNo
  *            ブロック名
 */
public void startBlock(int level, int line, int pos, String blockNo) {
    // BLOCK名の表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("startBlock(" + blockNo + ")").append(CRLF);
}

 /**
  * TAGの開始
  *
  * @param level
  *            階層
  * @param line
  *            ファイル内の行数
  * @param pos
  *            行内の位置
  * @param tagName
  *            TAG名
 */
public void startTag(int level, int line, int pos, String tagName) {
    // TAG名の表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("startTag(" + tagName + ")").append(CRLF);
}

 /**
  * TAGの終了
  *
  * @param level
  *            階層
  * @param line
  *            ファイル内の行数
  * @param pos
  *            行内の位置
  * @param tagName
  *            TAG名
 * @param tagData
 *            TAG内の値
 */
public void endTag(int level, int line, int pos, String tagName,
        String tagData) {
    // データの表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("\t");
    buffer.append(tagData).append(CRLF);

    // TAG名の表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("endTag(" + tagName + ")").append(CRLF);
}

/**
 * BLOCKの終了
 *
 * @param level
 *            階層
 * @param line
 *            ファイル内の行数
 * @param pos
 *            行内の位置
 * @param blockNo
 *            BLOCK名
 * @param blockData
 *            BLOCK内の値
 */
public void endBlock(int level, int line, int pos, String blockNo,
        String blockData) {
    // データの表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("\t");
    buffer.append(blockData).append(CRLF);

    // BLOCK名の表示
    buffer.append(line + ":\t");
    for (int i = 0; i < level; i++)
        buffer.append("\t");
    buffer.append("endBlock(" + blockNo + ")").append(CRLF);
}

/**
 * BLOCK内、TAG内での文字列読み込み時のイベント
 *
 * @param line
 *            ファイル内の行数
 * @param pos
 *            行内の位置
 * @param buffer
 *            読み込んだ文字
 */
public void character(int line, int pos, char buffer) {
    //
}

/**
 * ISO15022電文の終了
 *
 * @param line
 *            ファイル内の行数
 * @param pos
 *            行内の位置
 */
public void endDocument(int line, int pos) {
    buffer.append(line + ":\t");
    buffer.append("endDocument()").append(CRLF);
}

/**
 * 解析結果の取得
 *
 * @return StringBuilder
 */
public StringBuilder getBuffer() {
    return buffer;
}

}


お試し実行クラス
以下のお試し実行クラスを作成します。

package jasmp;

import java.io.File;
import java.io.IOException;
import jp.co.atomsware.swift.SwiftFormatException;
import jp.co.atomsware.swift.SwiftMessage;
import jp.co.atomsware.swift.helpers.CreateDomHandler;
import jp.co.atomsware.swift.helpers.HadlerBase;
import jp.co.atomsware.swift.parsers.SwiftParser;
import jp.co.atomsware.swift.parsers.SwiftParserFactory;

public class DomSample {
public static void main(String[] args) throws IOException,
         SwiftFormatException,  ClassNotFoundException,
         InstantiationException, IllegalAccessException {

     // パーサーのインスタンス化
     SwiftParserFactory spfactory = SwiftParserFactory.newInstance();
     SwiftParser parser = spfactory.newSwiftParser();

     // ハンドラのインスタンス化
     HadlerBase hadler = new CreateDomHandler();

     // ドキュメントのパース
     parser.parse(new File("data/Example1.txt"), hadler);

     // パース結果の表示
     for (SwiftMessage message : ((CreateDomHandler) hadler).getSwiftMessages())
         System.out.print("$" + message.toSwiftMessage());
 }

実行
実行するディレクトリの配下にdataというディレクトリを作成し、その配下にExample1.txtというSWIFT電文ファイル(ISO15022形式)を保存しておきます。
以下のようにプログラムを実行します。
java jasmp.RJEReadSample
XMLのSAXのようにSWIFT電文を読み込み、XMLのDOMのようなJavaのクラスに値を詰め込みます。
簡単にSWIFT電文を読むことができます。

サンプルダウンロード

!!!ダウンロード
jasmp-0.4.9.jar.zip 2015/03/08 252091 バイト
jasmp-0.4.9-src.zip 2015/03/08,279628 バイト
※Java SE 5 (J2SE5.0, JDK1.5) Tiger以上で動作します。

ライセンス
ライセンスは、Apache License 2.0に準拠します。