uCosminexus Interschema ユーザーズガイド
この節では,データ変換API(Java言語)の使用例を示します。
データ変換API(Java言語)の使用例には,次の三つの例があります。
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(); } }
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; } }
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; } }
All Rights Reserved, Copyright (C) 2000, Information-technology Promotion Agency, Japan.
All Rights Reserved. Copyright (C) 2005, 2008, Hitachi, Ltd.
All Rights Reserved, Copyright (C) 1985-1998, Microsoft Corporation.