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

5.20.2 文字列型

(1)IDLマッピング

IDL言語で文字列型stringを指定した場合は、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  stringtest{
        string op1( in string str1, out string str2, inout string str3 ); 
    };
};

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


Java言語】

<インタフェース>

package ODsample; 
public interface stringtestOperations {
    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 ( java.lang.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 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の前処理
                :
           // POAオブジェクトの生成
                :
           // Servantの生成とそのPOAへの登録
                :
           // POAManagerの活性化
                :
        }
        catch ( java.lang.Exception e ) {
            // エラー処理
                :
        }
    }
}

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