付録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を購入する必要があります。