Rewrite
call to do what you want
sub call {
SOAP::Trace::trace('()');
my $self = shift;
die "A service address has not been specified either by using SOAP
+::Lite->proxy() or a service description)\n"
unless defined $self->proxy && UNIVERSAL::isa($self->proxy =>
+'SOAP::Client');
$self->init_context();
my $serializer = $self->serializer;
$serializer->on_nonserialized($self->on_nonserialized);
my $response = $self->transport->send_receive(
context => $self, # this is provided for context
endpoint => $self->endpoint,
action => scalar($self->on_action->($serializer->uriformetho
+d($_[0]))),
# leave only parameters so we can later update them if
+ required
envelope => $serializer->envelope(method => shift, @_),
encoding => $serializer->encoding,
parts => @{$self->packager->parts} ? $self->packager->parts
+ : undef,
);
return $response if $self->outputxml;
my $result = eval { $self->deserializer->deserialize($response) }
if $response;
if (!$self->transport->is_success || # transport fault
$@ || # not deserializible
# fault message even if transport OK
# or no transport error (for example, fo TCP, POP3, IO impleme
+ntations)
UNIVERSAL::isa($result => 'SOAP::SOM') && $result->fault) {
return ($self->on_fault->($self, $@
? $@ . ($response || '')
: $result)
|| $result
);
# ? # trick editors
}
# this might be trouble for connection close...
return unless $response; # nothing to do for one-ways
# little bit tricky part that binds in/out parameters
if (UNIVERSAL::isa($result => 'SOAP::SOM')
&& ($result->paramsout || $result->headers)
&& $serializer->signature) {
my $num = 0;
my %signatures = map {$_ => $num++} @{$serializer->signature};
for ($result->dataof(SOAP::SOM::paramsout), $result->dataof(SO
+AP::SOM::headers)) {
my $signature = join $;, $_->name, $_->type || '';
if (exists $signatures{$signature}) {
my $param = $signatures{$signature};
my($value) = $_->value; # take first value
# fillup parameters
UNIVERSAL::isa($_[$param] => 'SOAP::Data')
? $_[$param]->SOAP::Data::value($value)
: UNIVERSAL::isa($_[$param] => 'ARRAY')
? (@{$_[$param]} = @$value)
: UNIVERSAL::isa($_[$param] => 'HASH')
? (%{$_[$param]} = %$value)
: UNIVERSAL::isa($_[$param] => 'SCALAR')
? (${$_[$param]} = $$value)
: ($_[$param] = $value)
}
}
}
return $result;
} # end of call()
On second thought, it looks as though you should create a custom serializer