# Number of lines of code in invoke: 87
my ( $self, %params ) = @_;
my $ctx = $params{ctx};
my $api_provider = $self->{api_provider};
my $methodName = $params{method_name};
my $methodArgs = $params{method_args};
#
# Get the method meta data from the stub class
#
my $operation = $self->{operations}->{$methodName};
if ( !defined($operation) ) {
my $message_factory =
Com::Vmware::Vapi::l10n::Runtime::get_runtime_message_factory();
my $msg = $message_factory->get_message(
id => 'Com.Vmware.Vapi.Bindings.ApiInterfaceStub.MethodNameNotFound',
args => [$methodName]
);
throw MethodNameNotFound( $msg->str() );
}
log_debug(MSG => "Converting perl to vAPI data value");
my $dataValue = Com::Vmware::Vapi::Bindings::Type::Converter::convert_to_vapi(
binding_type => $operation->{input_type},
perl_value => $methodArgs
);
log_debug(MSG => "Completed perl to vAPI data value conversion.");
log_dumper(MSG => $dataValue);
#############################################################
# Data Layer Integration
#############################################################
my $methodIdentifier = new Com::Vmware::Vapi::Core::MethodIdentifier(
interface_id => $self->{iface_id},
method => $methodName
);
my $serviceId = $methodIdentifier->get_interface_id();
my $operationId = $methodIdentifier->get_method_name();
my $data = $api_provider->invoke(
service_id => $serviceId,
operation_id => $operationId,
ctx => $ctx,
input => $dataValue
);
my $response = $api_provider->received(
json_response => $data,
output_type => $operation->{output_type},
errors => $operation->{errors}
);
log_dumper( MSG => $response );
my $vAPIDataValue = undef;
my $bindingType = undef;
if ( $response->get_success() eq 1 ) {
$vAPIDataValue = $response->get_output();
$bindingType = $operation->{output_type};
}
else {
$vAPIDataValue = $response->get_error();
#
# Get the class name of the error
#
my $errorClassName = $vAPIDataValue->get_name();
#$bindingType = $operation->{errors}->{$errorClassName};
#$bindingType = $bindingType->get_resolved_type();
my $package = Com::Vmware::Vapi::Util::Helper::get_package_name('name'=> $errorClassName);
$bindingType = $package->new()->get_binding_type();
}
my $perlValue = Com::Vmware::Vapi::Bindings::Type::Converter::convert_to_perl(
binding_type => $bindingType,
data_value => $vAPIDataValue
);
#
# Throw exception if the response is not successful
#
if ( $response->get_success() ne 1 ) {
#Exception::Class::Base->throw( error => $perlValue);
log_warning(MSG=>$perlValue);
die $perlValue;
}
return $perlValue;
}