mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-07 10:04:21 +00:00
improve handling of 0 hits responses of Scopus API
(cherry picked from commit b12bd6ce56
)
This commit is contained in:

committed by
github-actions[bot]
![github-actions[bot]](/assets/img/avatar_default.png)
parent
6e5c5089ab
commit
2b1270197e
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user