From: dbs Date: Tue, 8 Mar 2011 21:42:29 +0000 (+0000) Subject: Be more defensive when parsing SFX target results X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=3fbbcb39010a063d2e350f296287b3719d07b8f3;p=evergreen%2Fpines.git Be more defensive when parsing SFX target results SFX in the wild has been observed returning targets for getFullTxt requests that have no target URLs, which makes it rather impossible to provide a link to the full text resource. Skip such targets (and for good measure, skip them if they don't have a name either). Also, change from the SID "conifer" to the more generic and accurate "evergreen". git-svn-id: svn://svn.open-ils.org/ILS/trunk@19645 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/ResolverResolver.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/ResolverResolver.pm index 3463c1e9ef..4d852145e9 100644 --- a/Open-ILS/src/perlmods/lib/OpenILS/Application/ResolverResolver.pm +++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/ResolverResolver.pm @@ -123,7 +123,7 @@ sub resolve_holdings { # Big ugly SFX OpenURL request my $url_args = '?url_ver=Z39.88-2004&url_ctx_fmt=infofi/fmt:kev:mtx:ctx&' - . 'ctx_enc=UTF-8&ctx_ver=Z39.88-2004&rfr_id=info:sid/conifer&' + . 'ctx_enc=UTF-8&ctx_ver=Z39.88-2004&rfr_id=info:sid/evergreen&' . 'sfx.ignore_date_threshold=1&' . 'sfx.response_type=multi_obj_detailed_xml&__service_type=getFullTxt'; @@ -158,19 +158,27 @@ sub resolve_holdings { my @sfx_result; foreach my $target (@targets) { + my %full_txt; + + # Ensure we have a name and especially URL to return + $full_txt{'name'} = $target->findvalue('./target_public_name') || next; + $full_txt{'url'} = $target->findvalue('.//target_url') || next; + $full_txt{'coverage'} = $target->findvalue('.//coverage_statement') || ''; + $full_txt{'embargo'} = $target->findvalue('.//embargo_statement') || ''; + if ($format eq 'raw') { push @sfx_result, { - public_name => $target->findvalue('./target_public_name'), - target_url => $target->findvalue('.//target_url'), - target_coverage => $target->findvalue('.//coverage_statement'), - target_embargo => $target->findvalue('.//embargo_statement'), + public_name => $full_txt{'name'}, + target_url => $full_txt{'url'}, + target_coverage => $full_txt{'coverage'}, + target_embargo => $full_txt{'embargo'}, }; } else { my $rhr = Fieldmapper::resolver::holdings_record->new; - $rhr->public_name($target->findvalue('./target_public_name')); - $rhr->target_url($target->findvalue('.//target_url')); - $rhr->target_coverage($target->findvalue('.//coverage_statement')); - $rhr->target_embargo($target->findvalue('.//embargo_statement')); + $rhr->public_name($full_txt{'name'}); + $rhr->target_url($full_txt{'url'}); + $rhr->target_coverage($full_txt{'coverage'}); + $rhr->target_embargo($full_txt{'embargo'}); push @sfx_result, $rhr; } }