The way that I have done this in the past is to create my own class that inherits from Apache::SOAP and incorporates a new constructor that includes the call to the serializer function.
use vars qw( @ISA $VERSION );
# This class inherits from the Apache::SOAP class and is intended to
# functionality relating to the SOAP server itself, rather than the
# web services.
@ISA = qw( SOAP::Transport::HTTP::Apache );
my $server = __PACKAGE__->new;
my $self = shift;
unless( ref $self )
$self = __PACKAGE__->SUPER::new( @_ );
$self->serializer( My::SOAP::Serialiser->new );
# The following on_action handler is intended to make this w
+eb service .NET
# friendly by modifying the SOAPAction header to fit the for
+m of URI#method
# (the form preferred by SOAP::Lite) where the SOAPAction he
+ader is of the
# form URI/method (that employed by the .NET framework).
( my $action = shift ) =~ s/^("?)(.*)\1$/$2/;
if( $action &&
$action ne join( '#', @_ ) &&
$action ne join( '/', @_ ) &&
( substr( $_, -1, 1 ) ne '/' ||
$action ne join( '', @_ )))
$self->action( join '#', @_ );
(This code, although slightly modified to protect the innocent, is from an Apache::SOAP server implementation that was developed for interface from .NET solution components and shows one way to implement your own serialiser within Apache::SOAP derived solutions).
perl -le "print unpack'N', pack'B32', '00000000000000000000001000000000'"