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;
   }
}