Next SOAP::Lite Client Experiences 14

Overriding the Serializer


     sub SOAP::Serializer::as_int {
         my $self = shift;
         my($value, $name, $type, $attr) = @_;

         return [$name, {'xsi:type' => 'xsd:boolean', %$attr}, 'true']
             if ($name =~ /^(has|affects)/ && $value == 1);
         return [$name, {'xsi:type' => 'xsd:boolean', %$attr}, 'false']
             if ($name =~ /^(has|affects)/ && $value == 0);

         for (qw(eventaddorder showorder testconfigtype)) {
             return [$name, {'xsi:type' => 'xsd:short', %$attr}, $value] if $name eq $_;
         }

         for (qw(recordid cookie)) {
             return [$name, {'xsi:type' => 'xsd:long', %$attr}, $value] if $name eq $_;
         }

         return [$name, {'xsi:type' => 'xsd:int', %$attr}, $value];
     }

     $soap->typelookup->{dateTime} =
         [15, sub {$_[0] =~ /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d-\d\d:\d\d$/ }, 'as_dateTime'];
     sub SOAP::Serializer::as_dateTime {
         my $self = shift;
         my($value, $name, $type, $attr) = @_;
         return [$name, {'xsi:type' => 'xsd:dateTime', %$attr}, $value];
     }

Copyright © 2004 David Baird