ページの先頭行へ戻る
Interstage Application Server V12.3.0 アプリケーション作成ガイド(CORBAサービス編)
FUJITSU Software

5.20.3 ワイド文字列型

(1)IDLマッピング

IDL言語で文字列型wstringを指定した場合は、Java言語で記述すると、java.lang.Stringクラスとorg.omg.CORBA.StringHolderクラスになります。
java.lang.Stringクラスは、inパラメタおよび復帰値を扱う場合に使用します。
org.omg.CORBA.StringHolderクラスは、以下のようになります。本クラスは、out/inoutパラメタを受け渡す場合に使用します。


<org.omg.CORBA.StringHolderクラス>

final public class StringHolder {
      public java.lang.String value; 
      public StringHolder() { }
      public StringHolder(java.lang.String initial) {...}
}

org.omg.CORBA.StringHolderクラス中で定義されているメンバの意味を以下に示します。


org.omg.CORBA.StringHolderクラスのメンバ

意味

value

要素の値。

デフォルトコンストラクタ

valueメンバへの設定なしで、インスタンスを生成するために使用します。

コンストラクタ

valueメンバにパラメタで指定された要素の値を設定します。


IDL言語での定義が以下のように定義されていた場合について、アプリケーションプログラムの例を示します。


IDL言語】

module ODsample{
    interface  wstringtest{
        wstring op1(in wstring str1, out wstring str2, inout wstring str3); 
   };
};

これをJava言語で記述すると、以下のようになります。


Java言語】

<インタフェース>

package ODsample; 
public interface wstringtestOperations {
    public java.lang.String op1(java.lang.String str1, 
    org.omg.CORBA.StringHolder str2, 
    org.omg.CORBA.StringHolder str3 ); 
}

(2)クライアントアプリケーションでの処理

import org.omg.CORBA.*; 
import ODsample.*; 

public class stringClient { 
    public static void main(String args[]) {
        // ORBの前処理
        // オブジェクトリファレンスの獲得
            :
        try{ 
            // inパラメタ用変数
            String  in               = "in_str:data"; 
            // outパラメタ用変数
            StringHolder outHolder   = new StringHolder();
            // inoutパラメタ用変数
            StringHolder inoutHolder = new StringHolder( "inout_str:data" ); 
            // 復帰値用変数
            String       result; 
          
            // サーバアプリケーションのメソッド呼出し
            result = target.op1(in, outHolder, inoutHolder); 

           // メソッドの結果表示 
           System.out.println( result ); 
           System.out.println( outHolder.value ); 
           System.out.println( inoutHolder.value ); 
        } 
        catch (Exception e) { 
            // エラー処理
               :
        }
    }
}

Java言語でinパラメタをサーバアプリケーションに受け渡す場合は、直接java.lang.Stringクラスのインスタンスにデータをセットします。また、out/inoutパラメタとしてサーバアプリケーションにパラメタを受け渡す場合は、new演算子を使用して各データ型のorg.omg.CORBA.StringHolderクラスのインスタンスを生成します。inoutパラメタには、java.lang.Stringクラスのデータを設定します。
設定には、以下の2つの方法があります。


【デフォルトコンストラクタを使用した方法】

StringHolder a = new StringHolder();   //デフォルトコンストラクタ
a.value = "in_str:data";               //データの代入

【コンストラクタを使用した方法】

StringHolder b = new StringHolder("in_str:data");  //コンストラクタ

なお、サーバの処理結果は、out、inoutパラメタの各インスタンスのvalueに値が設定されます。復帰値は、java.lang.Stringクラスのインスタンスに直接設定されます。


(3)サーバアプリケーションでの処理

import org.omg.CORBA.*; 
import org.omg.PortableServer.*; 
import ODsample.*; 

// Servantクラス
// サーバアプリケーションのメソッド
class stringServant extends stringtestPOA {
    public stringServant(String[] args, java.util.Properties props) {
        super( args, props ); 
    }

    public String op1( String in, StringHolder outHolder, StringHolder inoutHolder ) {
        // 入力パラメタの表示
        System.out.println( in ); 
        System.out.println( inoutHolder.value ); 

        // 出力パラメタの設定
        outHolder.value = "out_str:data";
        inoutHolder.value = "inout-res_str:data";

        // 復帰
        return( "result_str:data" ); 
    }
}

public class stringServer {
    public static void main(String args[]) {
        try {
            // ORBの前処理
                 :
            // Servantの生成とそのORBへの登録
                 :
            // オブジェクトリファレンスの登録
                 :
            // クライアントからの要求待合せ
                 :
        } 
        catch (Exception e) {
            // エラー処理
                :
        }
    }
}

Java言語でinパラメタを参照する場合は、inパラメタのインスタンスを参照します。inoutパラメタを参照するには、org.omg.CORBA.StringHolderクラスからjava.lang.Stringクラスのインスタンスを取り出し、このインスタンスを参照します。また、out/inoutパラメタとしてクライアントアプリケーションにパラメタを返す場合、org.omg.CORBA.StringHolderクラスからjava.lang.Stringクラスのインスタンスを取り出し、このインスタンスに直接設定します。