Hippo2000 (2000/7/19)
SOAP::Envelope - SOAPストリームの作成
use SOAP::Envelope;
sub output_fcn {
my $string = shift;
print $string;
}
my $namespaces_to_preload = ["urn:foo", "urn:bar"];
my $env = SOAP::Envelope->new(\&output_fcn,
$namespaces_to_preload);
my $header = $env->header("urn:a", "MyHeaderA",
undef, undef,
0, 0);
...
$header->term();
$header = $env->header("urn:b", "MyHeaderB",
undef, undef,
0, 0);
...
$header->term();
my $body = $env->body("urn:c", "MyCall",
undef, undef);
...
$body->term();
$env->term();
このクラスはSOAPストリームへのオブジェクト・グラフのシリアル化を開始し(bootstrap)、管理します。これはSOAP::Transportクラスによって使われますが、直接使うこともできます。
新しいエンベロープを作成します。たくさん名前空間を使うことを知っていれば、それらの名前空間を予めロードすることにより(新しいエンベロープを作るときにURI文字列のセットを配列として渡す)いくつかの空間を節約することができます。
指定された名前空間URI(これは必須)に新しいヘッダを作成します。たくさんの異なるヘッダを生成するために複数回この関数を呼ぶことができますが、すべてのヘッダを作成するまではbody関数を呼ばないで下さい。
もし省略されると、typenameとtypeuriはアクセサ(accessor)名とアクセサuriから取得されますが、アクセサ名とuriは必要です。新しいものを作る前に現在のヘッダをterm()することを忘れないで下さい。オプションのパラメータ$objectについての説明は下記のbody()をご覧下さい。
ボディを生成します。この関数はエンベロープに一回だけこの関数を呼ぶことが出来ます。そして作成する必要があるすべてのヘッダを作成し終えた後に呼ばなければなりません。
もし省略されると、typenameとtypeuriはアクセサ(accessor)名とアクセサ uriから取得されますが、アクセサ名とuriは必要です。$objectパラメータはオプションですが、もしヘッダ(もしくはボディのなかの副要素)がボディそのものを指しているときには渡さなければなりません。SOAP::Envelopeは、これらのケース(ダブってリンクされているリストはこのケースの簡単な例です)を正しく取り扱うために、このオブジェクト・リファレンスをその識別子辞書に加えます。もし$objectを渡したら、body()のためにundefを返される準備しなければなりません。それはそのオブジェクトが既にヘッダ領域にマーシャル化されていることを示します。(ヘッダ要素によって参照されていたために)この場合、ボディ要素は以前にマーシャル化されたボディを単純に参照になります。body()が値を返すならば、ボディをシリアル化するのが終わったらterm()を呼ぶことを忘れないで下さい。というのもこれは未決着の複数リファレンス要素の出力を強制するからです。
endタグを書きこみ、SOAPエンベロープを終了させます。
SOAP::OutputStream SOAP::Packager SOAP::Defs
Keith Brown
SOAP::OutputStream SOAP::Transport::HTTP
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。