improve handling of 0 hits responses of Scopus API

(cherry picked from commit b12bd6ce56)
This commit is contained in:
Sascha Szott
2024-05-16 16:40:04 +02:00
committed by github-actions[bot]
parent 6e5c5089ab
commit 2b1270197e

View File

@@ -14,6 +14,7 @@ import java.io.StringReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -24,6 +25,8 @@ import java.util.regex.Pattern;
import javax.el.MethodNotFoundException;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.dspace.content.Item;
import org.dspace.importer.external.datamodel.ImportRecord;
import org.dspace.importer.external.datamodel.Query;
@@ -62,6 +65,8 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
@Autowired
private LiveImportClient liveImportClient;
private final static Logger log = LogManager.getLogger();
public LiveImportClient getLiveImportClient() {
return liveImportClient;
}
@@ -200,6 +205,9 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
Map<String, String> requestParams = getRequestParameters(query, null, null, null);
params.put(URI_PARAMETERS, requestParams);
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
if (StringUtils.isEmpty(response)) {
return 0;
}
SAXBuilder saxBuilder = new SAXBuilder();
// disallow DTD parsing to ensure no XXE attacks can occur
@@ -245,6 +253,10 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, null, null);
params.put(URI_PARAMETERS, requestParams);
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
if (StringUtils.isEmpty(response)) {
return results;
}
List<Element> elements = splitToRecords(response);
for (Element record : elements) {
results.add(transformSourceRecords(record));
@@ -304,6 +316,10 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
params.put(URI_PARAMETERS, requestParams);
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
if (StringUtils.isEmpty(response)) {
return results;
}
List<Element> elements = splitToRecords(response);
for (Element record : elements) {
results.add(transformSourceRecords(record));
@@ -349,6 +365,10 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
params.put(URI_PARAMETERS, requestParams);
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
if (StringUtils.isEmpty(response)) {
return results;
}
List<Element> elements = splitToRecords(response);
for (Element record : elements) {
results.add(transformSourceRecords(record));
@@ -383,10 +403,16 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
saxBuilder.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
Document document = saxBuilder.build(new StringReader(recordsSrc));
Element root = document.getRootElement();
List<Element> records = root.getChildren("entry",Namespace.getNamespace("http://www.w3.org/2005/Atom"));
String totalResults = root.getChildText("totalResults", Namespace.getNamespace("http://a9.com/-/spec/opensearch/1.1/"));
if (totalResults != null && "0".equals(totalResults)) {
log.debug("got Scopus API with empty response");
return Collections.emptyList();
}
List<Element> records = root.getChildren("entry", Namespace.getNamespace("http://www.w3.org/2005/Atom"));
return records;
} catch (JDOMException | IOException e) {
return new ArrayList<Element>();
log.warn("got unexpected XML response from Scopus API: " + e.getMessage());
return Collections.emptyList();
}
}
@@ -422,4 +448,4 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
this.instKey = instKey;
}
}
}