Revision: 11611
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 11, 2009 05:16 by gzpeva
Initial Code
#!/usr/bin/perl -w
use SOAP::Lite;
use CGI;
use SoapAccess;
use strict;
use Data::Dumper;
main();
exit 0;
sub main {
my ($soap_res, $res);
my ($element, $key, $count);
my ($reqrv, $reqres, $rv, $result, $function, %resultH, @params);
my $type = 1;
# **********************************
# URI = "urn:adminTool"
# *********************************
# my $SOAP_SERVER = "partnertest.hk1.outblaze.com";
my $SOAP_SERVER = "stagerm.outblaze.com";
# my $SOAP_SERVER = "resellertool1.hk1.outblaze.com";
# my $SOAP_SERVER = "rm.cl.outblaze.com";
# my $SOAP_SERVER = "devrm.outblaze.com";
# my $SOAP_SERVER = "reseller3.us4.outblaze.com";
# my $SOAP_SERVER = "rm.hk2.outblaze.com";
# my $SOAP_SERVER = "rm.us4.outblaze.com";
my $SOAP_PROXY = "http://$SOAP_SERVER/ob/servlet/rpcrouter";
my $URI = "urn:adminTool";
$function = "getCobrandServerInterface";
push @params, "namespace";
push @params, "gusv5test14.outblaze.com";
push @params, "5";
unless ($function) {
print "No function given";
exit 0;
}
my $soap = new SoapAccess($URI, $SOAP_PROXY);
($type == 1)
and ($reqrv, $reqres, $rv, $res, $result) = $soap->request($function, \@params);
($type == 2)
and ($reqrv, $reqres, $rv, $res, %resultH) = $soap->request($function, \@params);
print "SOAP_SERVER = $SOAP_SERVER\n";
print "function = $function\n";
print Dumper(\@params);
print "========Result============\n";
print "reqrv: $reqrv\n";
print "reqres: $reqres\n";
print "rv: $rv\n";
#use MIME::Base64 qw(encode_base64 decode_base64);
#my $a = $$rv{3711637}->{comment};
#print decode_base64($a);
#print $a;
print "rv(Dumper): ".Dumper($rv);
print "res: ".Dumper($res)."\n";
($type == 1)
and print "result: ".Dumper($result)."\n";
if ($type == 2) {
print "result: ".Dumper(\%resultH)."\n";
foreach my $key (keys %resultH) {
print "$key -- " . CGI::unescape($resultH{$key}) . "\n";
}
}
return 1;
}
##
###
### the definition of the package
####
###
###
#
# Class stored function simplifing access to SOAP
#
package SoapAccess;
use strict;
use SOAP::Lite;
use HTTP::Cookies;
use Data::Dumper;
#
# Constructor
#
# **********************
# Parameters : $uri, string, soap uri to the remote machine
# $proxy, string, url to call the soap request
# $timeout, integer, number of second for the soap transport timeout (Default : 30)
# $retry, integer, number of of times to retries for soap call failure (Default : 3)
# Return : the object
#
sub new {
my ($class, $uri, $proxy,$proxy_second, $timeout, $retry) = @_;
print "uri = $uri \n";
print "proxy = $proxy \n";
print "$SOAP::soapretry\n";
my $self = {
"uri" => $uri,
"proxy" => $proxy,
"timeout" => $timeout || 40, # default timout 30 seconds
"retry" => $retry || 1 , # default retry 3 times
"proxy_second" => $proxy_second ,
};
# Init the soap object
eval {
$self->{soapobj} = SOAP::Lite
->uri($self->{uri})
->proxy($self->{proxy}, cookie_jar => HTTP::Cookies->new(), timeout=>($self->{timeout}))
};
if ($@) {
warn "Error initializing $proxy object: $@\n";
return undef;
}
unless ($self->{soapobj}) {
warn "Error initalizing soap object\n";
return undef; #If soap obj creation failed, return error
}
bless $self, $class;
}
#
# submite the request
#
# *********************
# Parameters : $function, string, name of the function you would call
# @params, array, list of data you would pass to the function
# Return : boolean, indicate if the call completed ok
# string, description of what happened
# array, list of data returned from the call
#
sub request {
my ($self, $function, $params) = @_;
my ($result);
# setup init values
my $soapobj = $self->{soapobj};
my $retry = $self->{retry};
while ($retry) {
eval {
$result = $soapobj->$function(@$params);
};
# If result is good, terminate the call, otherwise, do another try
$retry = ((defined $result) && (!$result->fault))?0:$retry-1;
};
if ($@ || (!defined $result) || $result->fault) {
eval {
$self->{soapobj_second} = SOAP::Lite
->uri($self->{uri})
->proxy($self->{proxy_second}, cookie_jar => HTTP::Cookies->new(), timeout=>($self->{timeout}))
};
if ($@) {
warn "Error initalizing proxy_second object: $@\n";
return undef;
}
$soapobj = $self->{soapobj_second} ;
$retry = $self->{retry};
while ($retry) {
eval {
$result = $soapobj->$function(@$params);
};
$retry = ((defined $result) && (!$result->fault))?0:$retry-1;
} ;
if ($@ || (!defined $result) || $result->fault) {
if ($@) {
return (0, "failed: $@\n");
} elsif (defined $result && $result->fault) {
return (0, "request failed : " . $result->faultcode . "." . $result->faultstring);
} else {
return (0, "unknown error, no result returned");
} else {
return (0, "unknown error, no result returned");
}
}
}
if (defined $result->fault) {
return (0, "SOAP exception found: " . $result->faultcode . "." . $result->faultstring);
}
return (1, "ok", $result->result, $result->paramsout);
}
1;
~
Initial URL
Initial Description
Initial Title
Soap test in Outblaze
Initial Tags
Initial Language
Perl