この節では,データ変換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;
}
}