lsid-perl
view release on metacpan or search on metacpan
lib/LS/SOAP/Service.pm view on Meta::CPAN
bless $services, 'LS::SOAP::Fault';
die $services->fault();
}
sub getAvailableServices {
my $self = shift;
my $handler = $self->dispatch_authority_to();
unless ($handler) {
die LS::SOAP::Fault->faultcode('Client')
->faultstring('Unknown method')
->errorcode(101)
->description('A call was made to an unknown method getAvailableServices.');
}
my $services;
my $method_name;
if ($handler->can('getAvailableServices')) {
$method_name = 'getAvailableServices';
$services = $handler->getAvailableServices(@_);
}
else {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Not implemented')
->errorcode(501)
->description('getAvailableServices is not implemented by this authority service.');
}
unless(UNIVERSAL::isa($services, 'LS::Service::Fault') ||
UNIVERSAL::isa($services, 'LS::Service::Response') ) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Internal processing error')
->errorcode(500)
->description(
$method_name . ' in package ' .
(ref $handler ? ref $handler : $handler) .
' did not return a scalar or an LS::Service::Response object.'
);
}
if(UNIVERSAL::isa($services, 'LS::Service::Fault')) {
bless $services, 'LS::SOAP::Fault';
die $services->fault();
}
my @ret;
if ($services->expiration()) {
push(
@ret,
SOAP::Header->name(expiration=> $services->expiration())
->prefix($METHOD_PREFIX)
->uri(${LS::Authority::WSDL::Constants::SCHEMA_TYPES})
);
}
return (build MIME::Entity(Data=> $services->response()), @ret);
}
sub getMetadata {
my $self = shift;
my $handler = $self->dispatch_metadata_to();
unless ($handler) {
die LS::SOAP::Fault->faultcode('Client')
->faultstring('Unknown method')
->errorcode(101)
->description('A call was made to an unknown method getMetadata.');
}
unless ($handler->can('getMetadata')) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Not implemented')
->errorcode(501)
->description('getMetadata is not implemented by this metadata service.');
}
my $metadata = $handler->getMetadata(@_);
unless(UNIVERSAL::isa($metadata, 'LS::Service::Fault') ||
UNIVERSAL::isa($metadata, 'LS::Service::Response') ) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Internal processing error')
->errorcode(500)
->description(
'getMetadata in package ' .
(ref $handler ? ref $handler : $handler) .
' did not return a LS::Service::Response object.'
);
}
if($metadata->isa('LS::Service::Fault')) {
bless $metadata, 'LS::SOAP::Fault';
die $metadata->fault();
}
my @ret;
#
# Expiration is optional
#
if ($metadata->expiration()) {
push(
@ret,
SOAP::Header->name(expiration=> $metadata->expiration())
->prefix($METHOD_PREFIX)
->uri(${LS::Authority::WSDL::Constants::SCHEMA_TYPES})
);
}
#
# Metadata needs a type
#
unless($metadata->format()) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Internal processing error')
->errorcode(500)
->description(
'getMetadata in package ' .
(ref $handler ? ref $handler : $handler) .
' is missing metadata response format.'
);
}
push(
@ret,
SOAP::Data->name(format=> $metadata->format())
);
return (build MIME::Entity(Data=> $metadata->response()), @ret);
}
sub getData {
my $self = shift;
my $handler = $self->dispatch_data_to();
unless ($handler) {
die LS::SOAP::Fault->faultcode('Client')
->faultstring('Unknown method')
->errorcode(101)
->description('A call was made to an unknown method getData.');
}
unless ($handler->can('getData')) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Not implemented')
->errorcode(501)
->description('getData is not implemented by this data service.');
}
my $data = $handler->getData(@_);
unless(UNIVERSAL::isa($data, 'LS::Service::Fault') ||
UNIVERSAL::isa($data, 'LS::Service::Response') ) {
die LS::SOAP::Fault->faultcode('Server')
->faultstring('Internal processing error')
->errorcode(500)
->description(
( run in 3.116 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )