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 )