NAME

SOAP::Packager - SOAP internal helper class

SYNOPSIS

use SOAP::Packager;
my $packager = SOAP::Packager->new('s:', 1, sub { print shift } );

# some object used as a reference
my $object = SOAP::Object->new();

# on a given packager, register() always returns the same id for a given object
my $id = $packager->register($env, $object);
unless($id == $packager->register($env, $object)) { die "internal error" }

# this serializes objectA
$packager->seal($envelope);

# note that the package is still valid
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" }

# this just serializes objectB - objectA was already serialized before
$packager->seal($env);

# this does nothing except waste some cycles enumerating a hash table
$packager->seal($env=);

# hash tables shut down at destruction of packager, releasing object references
$packager = undef;

DESCRIPTION

This is an internal class used by the SOAP/Perl implementation. It is designed to manage a table of object references and XML ids used for serializing object graphs that may contain multiref data (and perhaps even cycles). If you are extending SOAP/Perl, the above synopsis will probably be all you need if you want to reuse this class. Whatever you pass for the $env reference should implement a function called _alloc_id that returns a unique string each time it is called. This is normally implemented by SOAP::Envelope, so you can see a sample implementation there.

NOTE NOTE NOTE: The SOAP "package" attribute was dropped when the SOAP spec went from version 1.0 to version 1.1. Use package-related functionality at your own risk - you may not interoperate with other servers if you rely on it. I'll eventually remove this feature if it doesn't reappear in the spec soon.

AUTHOR

Keith Brown

SEE ALSO

SOAP::Envelope SOAP::OutputStream