sub wsdl {
my $self = shift;
return $self->{WSDL} if $self->{WSDL};
$self->{WSDL} = XML::Compile::WSDL11->new($wsdl_file);
return $self->{WSDL};
}
sub cc {
my ( $self, $op, $full_response ) = @_;
return $self->{$op} if $self->{$op};
my $f = $self->wsdl()->compileClient(
operation => $op,
port => $port,
@dbug,
);
$self->{$op} = sub {
my $r = eval { $f->( @_ ) };
unless ($r) {
my $err = $@;
confess "Error calling SOAP method $op: $err";
}
my $fault = $r->{Fault};
confess "$fault->{faultcode}: $fault->{faultstring}" if $fault;
return $full_response ? $r : $r->{parameters};
};
}
####
$self->cc($method_name)->(%args);
####
my $r = eval { $f->( @_ ) };
unless ($r) {
my $err = $@;
confess "Error calling SOAP method $op: $err";
}
####
my $r = eval {
my $tmp = $f->( @_ );
$eval_err = $@;
$tmp;
};
my $err = $@;
close $fh;
unless ($r) {
no warnings 'uninitialized';
# Retry these errors
if ( $eval_err =~ /answer is not xml/ ) {
if ( $retry-- > 0 ) {
Print("[$$] Recieved text/html response. Will retry $op request.");
sleep 2;
next;
}
}
confess "Error calling SOAP method $op: [$err][$eval_err]";
}