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

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

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


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

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