Merge pull request #9203 from philipprumpf/issue-9202

CrossRefImport: ignore empty responses rather than generating empty phantom ImportRecords
This commit is contained in:
Alan Orth
2023-11-23 08:26:33 +03:00
committed by GitHub
2 changed files with 28 additions and 4 deletions

View File

@@ -162,7 +162,9 @@ public class CrossRefImportMetadataSourceServiceImpl extends AbstractImportMetad
Iterator<JsonNode> nodes = jsonNode.at("/message/items").iterator(); Iterator<JsonNode> nodes = jsonNode.at("/message/items").iterator();
while (nodes.hasNext()) { while (nodes.hasNext()) {
JsonNode node = nodes.next(); JsonNode node = nodes.next();
results.add(transformSourceRecords(node.toString())); if (!node.isMissingNode()) {
results.add(transformSourceRecords(node.toString()));
}
} }
return results; return results;
} }
@@ -196,7 +198,9 @@ public class CrossRefImportMetadataSourceServiceImpl extends AbstractImportMetad
String responseString = liveImportClient.executeHttpGetRequest(1000, uriBuilder.toString(), params); String responseString = liveImportClient.executeHttpGetRequest(1000, uriBuilder.toString(), params);
JsonNode jsonNode = convertStringJsonToJsonNode(responseString); JsonNode jsonNode = convertStringJsonToJsonNode(responseString);
JsonNode messageNode = jsonNode.at("/message"); JsonNode messageNode = jsonNode.at("/message");
results.add(transformSourceRecords(messageNode.toString())); if (!messageNode.isMissingNode()) {
results.add(transformSourceRecords(messageNode.toString()));
}
return results; return results;
} }
} }
@@ -250,7 +254,9 @@ public class CrossRefImportMetadataSourceServiceImpl extends AbstractImportMetad
Iterator<JsonNode> nodes = jsonNode.at("/message/items").iterator(); Iterator<JsonNode> nodes = jsonNode.at("/message/items").iterator();
while (nodes.hasNext()) { while (nodes.hasNext()) {
JsonNode node = nodes.next(); JsonNode node = nodes.next();
results.add(transformSourceRecords(node.toString())); if (!node.isMissingNode()) {
results.add(transformSourceRecords(node.toString()));
}
} }
return results; return results;
} }
@@ -333,4 +339,4 @@ public class CrossRefImportMetadataSourceServiceImpl extends AbstractImportMetad
this.url = url; this.url = url;
} }
} }

View File

@@ -48,6 +48,24 @@ public class CrossRefImportMetadataSourceServiceIT extends AbstractLiveImportInt
@Autowired @Autowired
private CrossRefImportMetadataSourceServiceImpl crossRefServiceImpl; private CrossRefImportMetadataSourceServiceImpl crossRefServiceImpl;
@Test
public void crossRefImportMetadataGetNoRecordsTest() throws Exception {
context.turnOffAuthorisationSystem();
CloseableHttpClient originalHttpClient = liveImportClientImpl.getHttpClient();
CloseableHttpClient httpClient = Mockito.mock(CloseableHttpClient.class);
try {
liveImportClientImpl.setHttpClient(httpClient);
CloseableHttpResponse response = mockResponse("" , 404, "Not Found");
when(httpClient.execute(ArgumentMatchers.any())).thenReturn(response);
context.restoreAuthSystemState();
Collection<ImportRecord> recordsImported = crossRefServiceImpl.getRecords("test query", 0, 2);
assertEquals(0, recordsImported.size());
} finally {
liveImportClientImpl.setHttpClient(originalHttpClient);
}
}
@Test @Test
public void crossRefImportMetadataGetRecordsTest() throws Exception { public void crossRefImportMetadataGetRecordsTest() throws Exception {
context.turnOffAuthorisationSystem(); context.turnOffAuthorisationSystem();