uCosminexus Interschema ユーザーズガイド

[目次][用語][索引][前へ][次へ]

10.4 データ変換処理API(Java言語)の使用例

この節では,データ変換API(Java言語)の使用例を示します。

データ変換API(Java言語)の使用例には,次の三つの例があります。

<この節の構成>
(1) サンプルコード(サーブレット版)
(2) サンプルコード(TranslateData派生クラス)
(3) サンプルコード(DateTimeクラス使用例)

(1) サンプルコード(サーブレット版)

 

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;
 
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jp.co.Hitachi.soft.interschema2.*;
 
/**
 * タイトル:  SampleServlet
 * 説明:    uCosminexus Interschema V2 Java API Servlet Sample.
 * 著作権:  All Rights Reserved. Copyright (C) 2005, Hitachi,Ltd.
 * @version  02-01
 */
public class SampleServlet extends HttpServlet {
 
    public static final String DOCTYPE =
        "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
        "Transitional//EN\"";
 
    public static String headWithTitle(String title) {
        return DOCTYPE + "\n" +
            "<HTML>\n" +
            "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n";
    }
 
    /**
     *
     * @param request request クライアントがサーブレットに行う要求を含む HttpServletRequest オブジェクト
     * @param response response サーブレットがクライアントに送信する応答を含む HttpServletResponse オブジェクト
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest, HttpServletResponse)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
 
        /*トランスレータ変数の定義*/
        Translator trans = null;
        /*MDL情報変数の定義*/
        MDLInfo mdlInfo = null;
 
        ServletContext sc = getServletContext();
 
        sc.log("変換を開始します。");
        try{
            /* パラメータの取得 */
            String inputFormat = request.getParameter("inFormat");
            String inputData = request.getParameter("inputData");
            String outFormat = request.getParameter("outFormat");
            String mdlFileName = request.getParameter("mdlFile");
 
            /*変換ライブラリの構築*/
            trans = new Translator("Sample.log");
 
            /*MDLファイルのロード*/
            mdlInfo = new MDLInfo(mdlFileName);
 
            /*入出力フォーマット情報の作成*/
            List input = new LinkedList();
            List output = new LinkedList();
 
            input.add(new StringData(inputFormat, inputData));
            output.add(new StringData(outFormat, null));
 
            /*変換処理の実行*/
            trans.exec(mdlInfo, input, output);
 
            String[] outData = new String[output.size()];
            for (int i = 0; i < output.size(); i++) {
                TranslateData tranData = (TranslateData)output.get(i);
                outData[i] = (String)tranData.getDataObject();
            }
 
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.print(headWithTitle("Interscheama 02-01 Servlet Sample"));
            for (int i = 0; i < outData.length; i++) {
                out.print(outData[i]);
            }
 
            /*変換終了ログの出力*/
            sc.log("変換が正常終了しました。");
        } catch (UserException ue) {
            sc = getServletContext();
            sc.log("UserExceptionが発生しました。", ue);
        } catch(TranslatorException te) {
            sc = getServletContext();
            sc.log("TranslatorExceptionが発生しました。[0x"
                     + Integer.toHexString(te.getErrorCode()) + "]"
                    + getErrorString(te), te);
        }
    }
 
    /**
     * サーブレットが POST 要求を処理する際に,service メソッド経由でサーバによって呼び出されます。
     * POST 要求も GET 要求と同じ処理を行う。
     * @param request クライアントがサーブレットに行う要求を含む HttpServletRequest オブジェクト
     * @param response サーブレットがクライアントに送信する応答を含む HttpServletResponse オブジェクト
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest, HttpServletResponse)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
        this.doGet(request, response);
    }
 
    /**
     * 拡張エラー情報を取得して,文字列に変換します。
     * @param te 拡張エラー情報文字列を取得するためのTranslatorException
     * @return 拡張エラー情報文字列
     */
    static String getErrorString(TranslatorException te) {
        ExtraErrorData d[] = te.getExtraErrData();
 
        if (d == null) {
            return new String("");
        }
        StringBuffer msg = new StringBuffer();
        for(int i = 0; i < d.length; i++) {
            msg.append("エラー情報[" + i + "]:");
            String s = Integer.toString(d[i].getMessageNo());
            msg.append("メッセージ番号[" + s + "],");
            s = Integer.toHexString(d[i].getErrorLV());
            msg.append("エラーレベル[0x" + s + "],");
            s = Integer.toString(d[i].getNumericData());
            msg.append("数値情報[" + s + "],");
            msg.append("文字列情報[" + d[i].getInformation() + "]");        
        }
        return msg.toString();
    }
}

 

(2) サンプルコード(TranslateData派生クラス)

 

import jp.co.Hitachi.soft.interschema2.TranslateData;
import jp.co.Hitachi.soft.interschema2.UserException;
 
/**
 * タイトル:  ByteArrayData
 * 説明:    uCosminexus Interschema V2 Java API Sample.
 * 著作権:  All Rights Reserved. Copyright (C) 2005, Hitachi,Ltd.
 * @version  02-01
 */
public class ByteArrayData extends TranslateData {
 
    /**
     * 指定のフォーマット名とバイト配列からバイト配列形式の変換対象データを生成する。
     * @param formatName 変換対象フォーマット名
     * @param formatData バイト配列形式のデータオブジェクト
     */
    public ByteArrayData(String formatName, byte[] dataObj) {
        super.setFormatName(formatName);
        super.setDataObject(dataObj);
    }
 
    /**
     * 指定のデータオブジェクトをバイト配列に変換する。
     * @param dataObj データオブジェクト
     * @exception UserException 指定のデータオブジェクトがバイト配列でない場合
         * @see jp.co.Hitachi.soft.interschema2.TranslateData#toByteArray(Object)
     */
    protected byte[] toByteArray(Object dataObj)
                throws UserException {
        if (!(dataObj instanceof byte[])) {
            throw new UserException();
        }
        return (byte[])dataObj;
    }
 
    /**
     * 指定のバイト配列をデータオブジェクトに変換する。
     * 指定のバイト配列をそのまま返します。
     * @param byteData バイト配列形式のデータオブジェクト
     * @exception TranslatorException 発生しない。
         * @see jp.co.Hitachi.soft.interschema2.TranslateData#toDataObject(byte[])
     */
    protected Object toDataObject(byte[] byteData) {
                return byteData;
    }
}

 

(3) サンプルコード(DateTimeクラス使用例)

 

package sample;
 
import java.util.Date;
import java.text.DateFormat;
import java.text.ParseException;
import jp.co.Hitachi.soft.interschema2.exitfunc.DateTime;
import jp.co.Hitachi.soft.interschema2.exitfunc.ExitFuncException;
 
/**
 *Javaによる出口関数を定義します。
 */
public class UserFunction {
    /**
     * 日付時刻を表す文字列をJavaメソッド,DateFormat.parse
     * を利用して解析し,Interschemaの日付時刻形式として設定
     * します。
     * この関数のettrans.iniの定義は以下のようになります。
     * ET_DTM FUNC002 (ET_STRING)
     * 第一引数のObjectは明示的には記述しません。
     * 関数名FUNC002は任意に付けた名前であり,Java
     * メソッド名と一致させる必要はありません。
     */
    public static DateTime func002(Object o, String strDateTime)
                throws ExitFuncException {
        DateTime result = null;
        try {
            /* デフォルトの日付フォーマッタを */
            /* 取得します。 */
            DateFormat dtFmt =
                 DateFormat.getDateTimeInstance();
            /* 入力日付文字列を解析します。 */
            Date date = dtFmt.parse(strDateTime);
            result = new DateTime(date);
        } catch (ParseException e) {
            /* 変換エラー発生               */
            throw new ExitFuncException(1);
        }        return result;
    }
}