Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re^2: Problems with SOAP::Lite client

by thion (Initiate)
on Dec 12, 2008 at 07:54 UTC ( [id://729872]=note: print w/replies, xml ) Need Help??


in reply to Re: Problems with SOAP::Lite client
in thread Problems with SOAP::Lite client

Hi,

thanks for the example.

I tried to build it into my "real" code, but I'm messing up something. I'm reading data from a database here and generate an array of hashes:
while($sth->fetch()) { my %hash; # Hash zusammenbasteln $hash{"kurzname"} = $kurzname; $hash{"plz"} = $plz; $hash{"stadt"} = $stadt; $hash{"status"} = $status; $hash{"typ"} = $typ; $hash{"zusatz"} = $zusatz; push(@ary,%hash); } $sth->finish(); $dss->updatePLZInformationen(@ary);
And here is the function that's called and is doing the actual SOAP stuff:
sub updatePLZInformationen() { my @data = shift; my $plz = SOAP::Lite -> service('file:/home/orca/oracle/DataSyncTool/config/SKADataServ +ice.wsdl'); my $serializer = $plz->serializer(); print($serializer->envelope( method => 'updatePLZInformationen', SOAP::Data->type("xsd:string")->name( "c +lientid" => "test" ), SOAP::Data->type("xsd:string")->name( "s +ecuritytoken" => "test" ), SOAP::Data->type("tns2:PLZInfo")->name(" +plzinfos")->value( \SOAP::Data->value(&format_plz_infos(@ +data))))); $plz->updatePLZInformationen(); } # -------------------------------------------------------------------- +---------------------------- # sub format_plz_infos() { my @plz = shift(); my @plz_info; foreach(@plz) { my $hash = $_; push(@plz_info,SOAP::Data->name("kurzname")->value($hash->{"ku +rzname"})->type("xsd:string")); push(@plz_info,SOAP::Data->name("plz")->value($hash->{"plz"})- +>type("xsd:string")); push(@plz_info,SOAP::Data->name("stadt")->value($hash->{"stadt +"})->type("xsd:string")); push(@plz_info,SOAP::Data->name("status")->value($hash->{"stat +us"})->type("xsd:string")); push(@plz_info,SOAP::Data->name("typ")->value($hash->{"typ"})- +>type("xsd:string")); push(@plz_info,SOAP::Data->name("zusatz")->value($hash->{"zusa +tz"})->type("xsd:string")); } return(@plz_info); } # -------------------------------------------------------------------- +---------------------------- #
And this is my SOAP-message:
?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body><updatePLZInformationen> <clientid xsi:type="xsd:string">test</clientid> <securitytoken xsi:type="xsd:string">test</securitytoken> <plzinfos xsi:type="tns2:PLZInfo"> <kurzname xsi:nil="true" xsi:type="xsd:string" /> <plz xsi:nil="true" xsi:type="xsd:string" /> <stadt xsi:nil="true" xsi:type="xsd:string" /> <status xsi:nil="true" xsi:type="xsd:string" /> <typ xsi:nil="true" xsi:type="xsd:string" /> <zusatz xsi:nil="true" xsi:type="xsd:string" /> </plzinfos> </updatePLZInformationen> </soap:Body> </soap:Envelope>
The message looks good, but it has no values... I'm reading my code for about an hour now, but I don't seem to get the mistake. :-(

Thanks in advance,

Thion

Replies are listed 'Best First'.
Re^3: Problems with SOAP::Lite client
by Anonymous Monk on Dec 12, 2008 at 15:41 UTC
    That is confusing. Instead of this
    push(@ary,%hash);
    you probably meant
    push @ary, \%hash;
    but then you probably meant
    $dss->updatePLZInformationen(%hash);
    instead. I could probably guess what you're really after, but its better if you pseudocode/diagram what you wish to accomplish, before writing actual code.
      Hi,

      ok, I'll try to explain:
      I walk through a database table and build a hash for each record in my resultset. This hash is pushed into an array. When the data-collecting is finished I call a subroutine (updatePLZInformationen()) to make the soap-call and pass the array of hashes. Ths subroutine calls another subroutine to format the complex type "plzinfo". Then it calls the soap-server. That's about it.
      But somewhere in the subroutines my values get lost...
      I'm sure it's just some stupid mistake, but I don't get it...
      Thanks again,

      Thion
        Well thats not detailed enough to be pseudocode, but OK, if you really want to stick with that strategy, here it is: I suggest a refresher of perlsub/perldata.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (7)
As of 2024-03-28 09:31 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found