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