付録H.3 CSCOwnCodeConverterインターフェース
- 〈この項の構成〉
(1) インターフェース
CSCOwnCodeConverterインターフェースを次に示します。
文字コード変換UOCを開発する場合,次のインターフェースの実装クラスを作成します。
|
|
- インターフェース名
-
CSCOwnCodeConverterインターフェース
- 説明
-
文字コード変換UOCを実装するためのインターフェースです。
CSCOwnCodeConverterのパッケージ名は,jp.co.Hitachi.soft.csc.dt.uoc.CSCOwnCodeConverterです。
- 形式
public class OwnCodeConverter implements CSCOwnCodeConverter { public void setProperties(final Properties properties) throws CSCOwnCodeConverterException; public char[] ownCodeToUnicode(final byte[] inBuffer) throws CSCOwnCodeConverterException; public byte[] unicodeToOwnCode(final char[] inBuffer) throws CSCOwnCodeConverterException; public int available(final byte[] inBuffer) throws CSCOwnCodeConverterException; }- メソッド
-
CSCOwnCodeConverterインターフェースのメソッドを次の表に示します。
メソッド名
説明
setPropertiesメソッド
独自定義ファイルの定義内容を文字コード変換UOCに渡すためのメソッドです。
ownCodeToUnicodeメソッド
独自文字コードの文字列をUnicodeに変換するメソッドです。
unicodeToOwnCodeメソッド
Unicode(UTF-16)の文字列を独自文字コードに変換するメソッドです。
availableメソッド
文字コード変換時に変換できる文字列のバイト数を返すメソッドです。
文字コード変換UOCからの各メソッドの呼び出し順序を次の図に示します。
図H‒2 文字コード変換UOCからの各メソッドの呼び出し順序
-
インスタンス生成
変換前の電文を受け取ったあと,データ変換によって文字コード変換UOCのインスタンスを生成します。
-
setPropertiesメソッド
独自定義ファイルの定義内容を文字コード変換UOCに渡します。このメソッドは,文字コード変換UOC開始時に一度だけ呼ばれます。
-
ownCodeToUnicodeメソッド,unicodeToOwnCodeメソッド,availableメソッド
それぞれのメソッドは,文字コード変換UOC実行時に文字コード変換から呼ばれます。メソッドの実行順序は電文フォーマットに依存します。
-
ownCodeToUnicodeメソッド
このメソッドで独自文字コードの文字列をUnicodeに変換します。
-
unicodeToOwnCodeメソッド
このメソッドでUnicode(UTF-16)の文字列を独自文字コードに変換します。
-
availableメソッド
このメソッドで文字コード変換時に変換できる文字列のバイト数を返します。
-
(a) setPropertiesメソッド
- 説明
-
独自定義ファイルの定義内容を文字コード変換UOCに渡します。
- 形式
public void setProperties(final Properties properties) throws CSCOwnCodeConverterException;- パラメタ
-
- properties:
-
独自定義ファイルの定義内容が格納されます。
- 注意事項
-
次の場合,setPropertiesメソッドの引数は必ずnullになります。setPropertiesメソッドの引数がnullの場合でも,文字コード変換UOCがエラーにならないように実装してください。
-
独自定義ファイルが存在しない(定義されていない)場合
-
カスタム受付以外の受付(独自定義ファイルを定義できない受付)から文字コード変換UOCを実行した場合
-
独自定義ファイルを定義できないアダプタから文字コード変換UOCを実行した場合
-
- 例外
-
- CSCOwnCodeConverterException:
-
文字コード変換処理中に異常が発生したため,データ変換処理全体を中断しました。
- 戻り値
-
なし。
(b) ownCodeToUnicodeメソッド
- 説明
-
独自文字コードの文字列をUnicodeに変換します。
- 形式
public char[] ownCodeToUnicode(final byte[] inBuffer) throws CSCOwnCodeConverterException;- パラメタ
-
- inBuffer:
-
独自文字コードの文字列を格納したバイト配列のバッファが格納されます。このバッファは読み込み専用のため,編集はできません。
- 例外
-
- CSCOwnCodeConverterException:
-
文字コード変換処理中に異常が発生したため,データ変換処理全体を中断しました。
- 戻り値
-
Unicodeに変換した文字列を格納した文字配列のバッファを返します。
(c) unicodeToOwnCodeメソッド
- 説明
-
Unicode(UTF-16)の文字列を独自文字コードに変換します。
- 形式
public byte[] unicodeToOwnCode(final char[] inBuffer) throws CSCOwnCodeConverterException;- パラメタ
-
- inBuffer:
-
Unicodeの文字列を格納した文字配列のバッファが格納されます。
このバッファは読み込み専用のため,編集はできません。
- 例外
-
- CSCOwnCodeConverterException:
-
文字コード変換処理中に異常が発生したため,データ変換処理全体を中断しました。
- 戻り値
-
独自文字コードに変換した文字列を格納したバイト配列バッファを返します。
(d) availableメソッド
- 説明
-
文字コード変換時に変換できる文字列のバイト数を返します。
- 形式
public int available(final byte[] inBuffer) throws CSCOwnCodeConverterException;- パラメタ
-
- inBuffer:
-
独自文字コードの文字列を格納したバイト配列のバッファが格納されます。このバッファは読み込み専用のため,編集はできません。
- 例外
-
- CSCOwnCodeConverterException:
-
文字コード変換処理中に異常が発生したため,データ変換処理全体を中断しました。
- 戻り値
-
正常に変換できる文字列のバイト数を格納します。ただし,変換できない文字がある場合は,その文字の前の文字までのバイト数を格納します。
(2) 例外クラス
文字コード変換UOCの開発時に発生する例外クラスを次に示します。
- クラス名
-
CSCOwnCodeConverterExceptionクラス
- 説明
-
文字コード変換処理中に異常が発生した場合に送出する例外です。
この例外が発生した場合は,データ変換処理全体を中断します。
(3) 実装例
CSCOwnCodeConverterインターフェースの実装例を次に示します。
public class OwnConvertUoc implements CSCOwnCodeConverter {
// コード変換オプション
HJCOption option = null;
// コード変換結果
HJCResult result = null;
// エンコード
String encode = null;
// コンストラクタ
public void OwnConvertUoc() {
result = new HJCResult();
option = new HJCOption();
}
// 独自定義ファイルをJavaのプロパティ形式で受け取る
public void setProperties(final Properties properties)
throws CSCOwnCodeConverterException {
if ( properties == null ) {
// 独自定義ファイルが登録されていない
// 独自定義ファイルを定義できない受付・サービスアダプタから実行されている
// 可能性があるのでエラーにしない
encode = "";
return;
}
encode = properties.getProperty("encode");
if ( encode == null ) {
// キーがない場合
String message = "文字コードが指定されていません。";
throw new CSCOwnCodeConverterException(message);
}
}
// 独自コードをUnicodeに変換する
public char[] ownCodeToUnicode(final byte[] inBuffer)
throws CSCOwnCodeConverterException {
if ( encode.equals("SJIS") ) {
// SJIS(MS932)からUnicodeに変換
// コード変換を使用
HJCString inStr = new HJCString( inBuffer );
try {
HJCConverters.cs_ms932tounicode(inStr, result, option);
} catch ( Exception e ){
throw new CSCOwnCodeConverterException(e);
}
return result.getStrResult().toString().toCharArray();
}
else if ( encode.equals("KEIS") ) {
// KEISからUnicodeに変換
// コード変換を使用
HJCString inStr = new HJCString( inBuffer );
try {
HJCConverters.cs_keistounicode(inStr, result, option);
} catch ( Exception e ){
throw new CSCOwnCodeConverterException(e);
}
return result.getStrResult().toString().toCharArray();
}
else {
// 対象外の文字コード
String message = "対象外の文字コードです。";
throw new CSCOwnCodeConverterException(message);
}
}
// Unicodeを独自コードに変換する
public byte[] unicodeToOwnCode(final char[] inBuffer)
throws CSCOwnCodeConverterException {
// (中略)
}
// 正常に変換できるバイト数を返す
public int available(final byte[] inBuffer)
throws CSCOwnCodeConverterException {
// (中略)
}
}- 注意事項
-
例と同じ実装にする場合は,別途Code Converterを購入する必要があります。