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