17.3.8 リクエストの引数を設定

Requestの引数はNVListオブジェクトで表現されます。このオブジェクトは名前・値のペアをNamedValueオブジェクトとして格納します。このリストのポインタを取得するには,argumentsメソッドを使用します。そのあと,このポインタを使用して個々の引数の名前と値を設定できます。

Requestを送信する前に,必ず引数を初期化してください。そうしないと,マーシャルエラーが発生し,サーバの処理が中断されることがあります。
<この項の構成>
(1) NVListを使用して引数のリストをインプリメントする
(2) NamedValueクラスを使用して入出力引数を設定する

(1) NVListを使用して引数のリストをインプリメントする

このクラスは,メソッド起動用の引数を表すNamedValueオブジェクトのリストをインプリメントします。リスト内のオブジェクトの追加,削除,および照会を行うメソッドが提供されます。

コードサンプル17-10 NVListクラス(C++)

class NVList {
  public:
     . . .
     CORBA::Long count() const;
     CORBA::NamedValue_ptr add(CORBA::Flags flags);
     CORBA::NamedValue_ptr add_item(
        const char *name, CORBA::Flags flags);
     CORBA::NamedValue_ptr add_value(
        const char *name,
        const CORBA::Any *any,
        CORBA::Flags flags);

  CORBA::NamedValue_ptr add_item_consume(
        char *name, CORBA::Flags flags);
  CORBA::NamedValue_ptr add_value_consume(
        char *name,
        CORBA::Any *any,
        CORBA::Flags flags);
  CORBA::NamedValue_ptr item(CORBA::Long index);
  CORBA::Status remove(CORBA::Long index);
  . . .
};

コードサンプル17-11 NVListクラス(Java)

package org.omg.CORBA;

public abstract class NVList {
  public int count();
  public org.omg.CORBA.NamedValue add(int flags);
  public org.omg.CORBA.NamedValue add_item(
                            java.lang.String name, int flags);
  public org.omg.CORBA.NamedValue add_value(
     java.lang.String name,
     org.omg.CORBA.Any value,
     int flags
  );
  public org.omg.CORBA.NamedValue item(int index);
  public void remove(int index);
}

(2) NamedValueクラスを使用して入出力引数を設定する

このクラスは,メソッド起動リクエストの入出力両用の引数を表す名前・値のペアをインプリメントします。NamedValueクラスは,クライアントプログラムへ返すリクエストの結果を表すために使用することもできます。nameプロパティは単なる文字列であり,valueプロパティはAnyクラスによって表されます。コードサンプル17-12にNamedValueクラスの例(C++),およびコードサンプル17-13にNamedValueクラスの例(Java)を示します。

Javaの場合,このクラスにコンストラクタはありません。NamedValueオブジェクトのリファレンスを取得するには,ORB.create_named_valueメソッドを使用します。
コードサンプル17-12 NamedValueクラス(C++)

class NamedValue{
  public:
     const char *name() const;
     CORBA::Any *value() const;
     CORBA::Flags flags() const;
};

コードサンプル17-13 NamedValueインタフェース(Java)

package org.omg.CORBA;
public abstract class NamedValue {
  public java.lang.String name();
  public org.omg.CORBA.Any value();
  public int flags();
}

表17-1は,NamedValueクラスのメソッドの説明です。

表17-1 NamedValueのメソッド

メソッド説明
name項目名のポインタを返します。このポインタを使用して名前を初期化できます。
value項目の値を表すAnyオブジェクトのポインタを返します。このポインタを使用して値を初期化できます。詳細については,「17.3.9 Anyクラスを使用して型を保護した状態で引き渡す」を参照してください。
flagsこの項目が入力引数,出力引数,入出力両用の引数のどれであるかを示します。項目が入出力両用の引数である場合は,VisiBroker ORBが引数のコピーを作成して呼び出し側のメモリをそのまま残すように指示するフラグを指定できます。次のフラグがあります。
  • ARG_IN
  • ARG_OUT
  • ARG_INOUT