PASMP

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

PyPIからダウンロードできます => PASMP

pipが使える環境なら以下の実行でダウンロードされます。

pip install pasmp

Sample 1

    import atomsware.pasmp
    from atomsware.pasmp.handler import *


    class QuotationHandler(ContentHandler):
        value = ""

        def __init__(self):
            ContentHandler.__init__(self)

        def startDocument(self, locator):
            print('=== Begin Document ===' + str(locator))

        def startBlock(self, locator, blockNo):
            print('## Begin Block' + blockNo + ' ---' + str(locator))
            self.value = ""

        def startTag(self, locator, tagName):
            print('--- Begin Tag' + tagName + ' ---' + str(locator))
            self.value = ""

        def endTag(self, locator, tagName):
            print(self.value.strip())
            print('--- End Tag' + tagName + ' ---' + str(locator))

        def endBlock(self, locator, blockNo):
            if blockNo == "1" or blockNo == "2":
                print(self.value)
            print('## End Block' + blockNo + ' ---' + str(locator))

        def endDocument(self):
            print('=== End Document ===')

        def characters(self, locator, ch):
            self.value = self.value + ch


    if __name__ == '__main__':
        parser = atomsware.pasmp.make_parser()
        handler = QuotationHandler()
        parser.setContentHandler(handler)
        parser.parse("sample1.mt")

Sample 2

    import atomsware.pasmp
    from atomsware.pasmp.handler import *
    from atomsware.pasmp.models import *

    if __name__ == '__main__':
        parser = atomsware.pasmp.make_parser()
        handler = DomHandler()
        parser.setContentHandler(handler)
        parser.parse("sample2.mt")
        dom = handler.mt

        for block in dom.blocks:
            if isinstance(block, BasicHeaderBlock):
                print(str(block.appID))
                print(str(block.serviceID))
                print(str(block.lTAddr))
                print(str(block.sessionID))
                print(str(block.sequenceID))
            if isinstance(block, ApplicationHeaderBlock):
                print(str(block.ioType))
                print(str(block.messageType))
                print(str(block.lTAddr))
            if isinstance(block, UserHeaderBlock):
                for tag in block.tags:
                    print(str(tag))
            if isinstance(block, TextBlock):
                for tag in block.tags:
                    print(str(tag))

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に準拠します。

EXCELdeDB

テスト実施前のデータ投入・実施後のテストデータの取得
を行うためのテストデータ管理を行うためのツールです。

現在対応しているのは、SQL SERVER、ORACLEです。
Office のバージョンは、2010です。

システムを開発しやすい環境にすることを目的としています。

※バイナリデータの取り扱いに迷っていますが、
 BLOBやバイナリデータを取り扱わなければ、使えるかと思うので
 ベータ版でリリースします。

 不具合は、どんどんお知らせください。

連絡先メールアドレス: sysman@atomsware.co.jp

Oracle

OraOLEDBが必要になります。Oracle Clientをインストールしてください。
MS-SQL

SQLOLEDBが必要になります。Microsoft SQL Server Native Clientをインストールしてください。

使い方

データ取得

  • 図の1にDBへの接続情報を入力します。
  • 図の2のボタンを押下してDBへの接続確認を行います。
  • 図の3のボタンを押下すると図の1のユーザの保持するテーブル一覧が作成されます。
  • 図の6に取得したいテーブルの行に○を入れます。
  • 図の4のボタンを押下すると各テーブルごとのシートが作成され、データが取得されます。(図の1のMaximum numberを最大取得件数とします。)
    !データ更新
  • 各シートのデータを更新します。
  • 図の7に更新したいテーブルの行に○を入れます。
  • 図の5のボタンを押下すると各シートの内容でテーブルを更新します。
    !シートの初期化
  • 図の8のボタンを押下するとシートを初期化します。

ダウンロード

EXCELdeDBv0.94.zip — 2016/2/22 47896 バイト

サポート情報

Q. データ型はサポートされていませんのエラーがでる。
A. OracleのTimestamp型にMS-ADOが対応していないために発生します。 Timestamp型をDate型に変更するか、.Netをインストールすることで解消するようです。