Hippo2000 (2000/7/19)
SOAP::Packager - SOAP 内部ヘルパクラス
use SOAP::Packager;
my $packager = SOAP::Packager->new('s:', 1, sub { print shift } );
# リファレンスとして使われるオブジェクト
my $object = SOAP::Object->new();
# 与えられたパッケージについて、register()は常に与えられたオブジェクトのための同じ識別子を返します
my $id = $packager->register($env, $object);
unless($id == $packager->register($env, $object)) { die "internal error" }
# これはオブジェクト(objectA)をシリアライズします
$packager->seal($envelope);
# パッケージがまだ有効であることに注意
unless($id == $packager->register($env, $object)) { die "internal error" }
my $objectB = SOAP::Object->new();
my $idB = $packager->register($env, $objectB);
unless($idB == $packager->register($env, $objectB)) { die "internal error" }
# これはobjectBをシリアライズします - objectAは以前に既にシリアライズされています
$packager->seal($env);
# これはハッシュテーブルの循環エミュレーションを浪費する以外は何もしません。
$packager->seal($env=);
# packagerの破壊時点でハッシュテーブルはシャットダウンされ、オブジェクト・リファレンスを解放します
$packager = undef;
これはSOAP/Perl実装により使われる内部クラスです。これは、複数のリファレンス・データ(そして多分循環も)が入っているかもしれないオブジェクト・グラフをシリアル化するために使われるオブジェクト・リファレンスのテーブルとXML識別子を管理します。SOAP/Perlを拡張するのであれば、このクラスを再利用するのであれば、上記の概要はおそらくあなたが必要とするすべてになるでしょう。$envリファレンスのために渡すものは何なんでも、呼ばれた時々にユニークな文字列を返す_alloc_idと呼ばれる関数を実装しなければなりません。これは通常、SOAP::Envelopeにより実装されます。そのためそこでサンプルの実装を見ることができます。
Keith Brown
SOAP::Envelope SOAP::OutputStream
ご意見、ご質問はこちらの掲示板で受け付けています。
またメールは河馬屋(Nifty)にお願いします。