lsid-perl

 view release on metacpan or  search on metacpan

lib/LS/HTTP/Service.pm  view on Meta::CPAN

#

sub getAvailableServices {

	my $self = shift;

	my $handler = $self->dispatch_authority_to;

	unless ($handler) {

		#die LS::HTTP::Fault->faultcode('Client')
		                   #->faultstring('Unknown method')
		                   #->errorcode(101)
		                   #->description('A call was made to an unknown method getAvailableServices.');
	}

	my $response;
	my $method_name;
	
	if ($handler->can('getAvailableServices')) {

		$method_name = 'getAvailableServices';
		$response = $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($response, 'LS::Service::Response') || 
		 UNIVERSAL::isa($response, 'LS::Service::Fault')) ) {

		#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::SOAP::Response object.'
		                     #);	
	}

	if(UNIVERSAL::isa($response, 'LS::Service::Fault')) {

		bless $response, 'LS::HTTP::Fault';
		$response->to_http_response;

		return undef;
	}

	my @ret;
	if (ref $response eq 'LS::SOAP::Response') {

		if ($response->expires) {

			push(
				@ret, undef
				#SOAP::Header->name(expires => $response->expires)
					    #->prefix($METHOD_PREFIX)
					    #->uri($URI)			
			);
		}
	}
	
	return @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 $response = $handler->getMetadata(@_);

	unless( (UNIVERSAL::isa($response, 'LS::Service::Response') || 
		 UNIVERSAL::isa($response, 'LS::Service::Fault')) ) {

		#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 scalar or an LS::SOAP::Response object.'
		                     #);
	}

	if(UNIVERSAL::isa($response, 'LS::Service::Fault')) {

		bless $response, 'LS::HTTP::Fault';
		$response->to_http_response;

		return undef;
	}

	my @ret;
	if (ref $response eq 'LS::HTTP::Response') {
		if ($response->expires) {
			push(
				@ret, undef
				#SOAP::Header->name(expires => $response->expires)
					    #->prefix($METHOD_PREFIX)
					    #->uri($URI)			
			);
		}
	}

	return @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::Response') || UNIVERSAL::isa($data, 'LS::Service::Fault')) ) {

		#die LS::SOAP::Fault->faultcode('Server')
		                   #->faultstring('Internal processing error')
		                   #->errorcode(500)
		                   #->description(
		                   	#'getData in package ' . 
		                   	#(ref $handler ? ref $handler : $handler) . 
		                   	#' did not return a scalar.'
		                     #);	
	}

	if(UNIVERSAL::isa($data, 'LS::Service::Fault')) {

		bless $data, 'LS::HTTP::Fault';
		$data->to_http_response;

		return undef;
	}
}


#
# Faults for HTTP based authorities
#
package LS::HTTP::Fault;



( run in 1.545 second using v1.01-cache-2.11-cpan-39bf76dae61 )