Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第6章 アプリケーションの開発(Java言語)> 6.17 データ型に対するマッピング

6.17.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クラスのインスタンスを取り出し、このインスタンスに直接設定します。


目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005