Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: SOAP? Setting BODY Manually

by Anonymous Monk
on Jul 17, 2008 at 03:49 UTC ( #698232=note: print w/ replies, xml ) Need Help??


in reply to SOAP? Setting BODY Manually

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


Comment on Re: SOAP? Setting BODY Manually
Select or Download Code
Re^2: SOAP? Setting BODY Manually
by marcjb (Initiate) on Jul 22, 2008 at 20:29 UTC
    Sorry for the delay in responding (I've been out for a few days). Thank you very much for taking the time to respond. I may be able to define the name of the function and have that removed from the file, so I can then get away without a custom serializer. Otherwise, I have some work ahead of me! Thanks again, Marc

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://698232]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (8)
As of 2015-07-04 14:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls