And here's a client to that server:#!/usr/bin/perl -w use RPC::XML; use RPC::XML::Server; use Data::Dumper; # xml rpc server $server = RPC::XML::Server->new(host => 'localhost', port => '8888', q +ueue=>'5', no_default=>1, no_http=>0); $server->add_method({ name => 'test', signature => [ 'struct struct' +], code => \&test }); $server->server_loop; sub test { print Dumper(\@_); my $serv = shift; my $hash = shift; print Dumper(\$hash); my %hash = %$hash; print Dumper(\%hash); if ($hash{called_number_int}) { return {'answer' => 'OK bejby'}; } else { return RPC::XML::fault->new('444', 'not good'); } }
now if you will start the server and call the client, here's what you will get... server:#!/usr/bin/perl -w require RPC::XML; require RPC::XML::Client; use Data::Dumper; my @params = ({ 'called_number_net'=>{"nat"=>3,"number"=>223344600 +}, 'called_number_int'=>'+420223344600', 'event_type'=>1, }); $cli = RPC::XML::Client->new('http://localhost:8888/RPC2'); $request = RPC::XML::request->new('test', @params); $resp = $cli->send_request($request); print Dumper(\$resp); $hash = $resp->value; print Dumper (\$hash); print $hash->{answer}; print "\n";
and client:./rpcxmlserver.pl $VAR1 = [ bless( { '__response' => bless( { '_content' => '', '_rc' => 200, '_headers' => bless( { 'co +ntent-type' => 'text/xml', 'ac +cept' => 'text/xml', 'ac +cept-encoding' => 'deflate', 'rp +c-server' => 'RPC::XML::Server/1.44', 'rp +c-encoding' => 'XML-RPC' }, 'H +TTP::Headers' ), '_msg' => 'OK' }, 'HTTP::Response' ), 'method_name' => 'test', '__started' => 1204548264, '__auto_methods' => 0, '__method_table' => { 'test' => bless( { 'signature +' => [ + 'struct struct' + ], 'sig_table +' => { + 'struct' => 'struct' + }, 'name' => +'test', 'code' => +sub { "DUMMY" } }, 'RPC::XML +::Method' ) }, '__compress_re' => qr/(?-xism:deflate)/, '__message_temp_dir' => '', '__auto_updates' => 0, '__compress' => 'deflate', '__daemon' => bless( \*Symbol::GEN0, 'HTTP::Daemon' + ), '__message_file_thresh' => 1048576, '__xpl_path' => [], '__version' => 'RPC::XML::Server/1.44', '__path' => '', '__timeout' => 10, '__compress_thresh' => 4096, '__debug' => 0, 'signature' => [ 'struct', 'struct' ], '__requests' => 0, '__parser' => bless( { 'stack' => [], 'cdata' => '+420223344600' }, 'RPC::XML::Parser' ), '__port' => '8888', '__host' => 'localhost' }, 'RPC::XML::Server' ), { 'called_number_net' => { 'nat' => '3', 'number' => '223344600' }, 'event_type' => '1', 'called_number_int' => '+420223344600' } ]; $VAR1 = \{ 'called_number_net' => { 'nat' => '3', 'number' => '223344600' }, 'event_type' => '1', 'called_number_int' => '+420223344600' }; $VAR1 = { 'called_number_net' => { 'nat' => '3', 'number' => '223344600' }, 'event_type' => '1', 'called_number_int' => '+420223344600' };
So as you can see, there's a difference between getting data from RPC::XML in server and in client and you probably need both of them..../rpcxmlklient.pl $VAR1 = \bless( { 'answer' => bless( do{\(my $o = 'OK bejby')}, 'RPC: +:XML::string' ) }, 'RPC::XML::struct' ); $VAR1 = \{ 'answer' => 'OK bejby' }; OK bejby
and it works like this - a) 1st shift loads info from rpc xml, that is not your data...and if you think it's huge, try to change no_default=>1 parameter in server to no_default=>0 ;]my $serv = shift; my $hash = shift; my %hash = %$hash;
$hash = $resp->value;
In reply to Re^2: getting values out of RPC::XML response array
by dr_k
in thread getting values out of RPC::XML response array
by inblosam
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |