Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


付録H.3 CSCOwnCodeConverterインターフェース

〈この項の構成〉

(1) インターフェース

CSCOwnCodeConverterインターフェースを次に示します。

文字コード変換UOCを開発する場合,次のインターフェースの実装クラスを作成します。

図H‒1 文字コード変換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からの各メソッドの呼び出し順序

[図データ]

  1. インスタンス生成

    変換前の電文を受け取ったあと,データ変換によって文字コード変換UOCのインスタンスを生成します。

  2. setPropertiesメソッド

    独自定義ファイルの定義内容を文字コード変換UOCに渡します。このメソッドは,文字コード変換UOC開始時に一度だけ呼ばれます。

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