mirror of
https://github.com/DSpace/DSpace.git
synced 2025-10-08 10:34:25 +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.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -24,6 +25,8 @@ import java.util.regex.Pattern;
|
|||||||
import javax.el.MethodNotFoundException;
|
import javax.el.MethodNotFoundException;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
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.content.Item;
|
||||||
import org.dspace.importer.external.datamodel.ImportRecord;
|
import org.dspace.importer.external.datamodel.ImportRecord;
|
||||||
import org.dspace.importer.external.datamodel.Query;
|
import org.dspace.importer.external.datamodel.Query;
|
||||||
@@ -62,6 +65,8 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
|
|||||||
@Autowired
|
@Autowired
|
||||||
private LiveImportClient liveImportClient;
|
private LiveImportClient liveImportClient;
|
||||||
|
|
||||||
|
private final static Logger log = LogManager.getLogger();
|
||||||
|
|
||||||
public LiveImportClient getLiveImportClient() {
|
public LiveImportClient getLiveImportClient() {
|
||||||
return liveImportClient;
|
return liveImportClient;
|
||||||
}
|
}
|
||||||
@@ -200,6 +205,9 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
|
|||||||
Map<String, String> requestParams = getRequestParameters(query, null, null, null);
|
Map<String, String> requestParams = getRequestParameters(query, null, null, null);
|
||||||
params.put(URI_PARAMETERS, requestParams);
|
params.put(URI_PARAMETERS, requestParams);
|
||||||
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
||||||
|
if (StringUtils.isEmpty(response)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
SAXBuilder saxBuilder = new SAXBuilder();
|
SAXBuilder saxBuilder = new SAXBuilder();
|
||||||
// disallow DTD parsing to ensure no XXE attacks can occur
|
// 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);
|
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, null, null);
|
||||||
params.put(URI_PARAMETERS, requestParams);
|
params.put(URI_PARAMETERS, requestParams);
|
||||||
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
||||||
|
if (StringUtils.isEmpty(response)) {
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
List<Element> elements = splitToRecords(response);
|
List<Element> elements = splitToRecords(response);
|
||||||
for (Element record : elements) {
|
for (Element record : elements) {
|
||||||
results.add(transformSourceRecords(record));
|
results.add(transformSourceRecords(record));
|
||||||
@@ -304,6 +316,10 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
|
|||||||
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
|
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
|
||||||
params.put(URI_PARAMETERS, requestParams);
|
params.put(URI_PARAMETERS, requestParams);
|
||||||
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
||||||
|
if (StringUtils.isEmpty(response)) {
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
List<Element> elements = splitToRecords(response);
|
List<Element> elements = splitToRecords(response);
|
||||||
for (Element record : elements) {
|
for (Element record : elements) {
|
||||||
results.add(transformSourceRecords(record));
|
results.add(transformSourceRecords(record));
|
||||||
@@ -349,6 +365,10 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
|
|||||||
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
|
Map<String, String> requestParams = getRequestParameters(queryString, viewMode, start, count);
|
||||||
params.put(URI_PARAMETERS, requestParams);
|
params.put(URI_PARAMETERS, requestParams);
|
||||||
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
String response = liveImportClient.executeHttpGetRequest(timeout, url, params);
|
||||||
|
if (StringUtils.isEmpty(response)) {
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
List<Element> elements = splitToRecords(response);
|
List<Element> elements = splitToRecords(response);
|
||||||
for (Element record : elements) {
|
for (Element record : elements) {
|
||||||
results.add(transformSourceRecords(record));
|
results.add(transformSourceRecords(record));
|
||||||
@@ -383,10 +403,16 @@ public class ScopusImportMetadataSourceServiceImpl extends AbstractImportMetadat
|
|||||||
saxBuilder.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
|
saxBuilder.setFeature("http://apache.org/xml/features/disallow-doctype-decl",true);
|
||||||
Document document = saxBuilder.build(new StringReader(recordsSrc));
|
Document document = saxBuilder.build(new StringReader(recordsSrc));
|
||||||
Element root = document.getRootElement();
|
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;
|
return records;
|
||||||
} catch (JDOMException | IOException e) {
|
} 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