diff --git a/src/main/java/org/folio/oaipmh/helpers/AbstractGetRecordsHelper.java b/src/main/java/org/folio/oaipmh/helpers/AbstractGetRecordsHelper.java index 740c950f..adf3589f 100644 --- a/src/main/java/org/folio/oaipmh/helpers/AbstractGetRecordsHelper.java +++ b/src/main/java/org/folio/oaipmh/helpers/AbstractGetRecordsHelper.java @@ -17,6 +17,7 @@ import io.vertx.ext.web.codec.BodyCodec; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.NotImplementedException; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -472,11 +473,9 @@ protected Future processRecords(Context ctx, Request request, Promise oaiResponsePromise = Promise.promise(); buildRecords(ctx, request, items).onSuccess(recordsMap -> { Response response; - if ((recordsMap.isEmpty() && jsonArrayIsEmptyCheck(items)) || - (recordsMap.isEmpty() && jsonArrayNotEmptyCheck(items) && VerbType.GET_RECORD != request.getVerb()) - ) { + if (noRecordsFoundResultCheck(recordsMap, items, request.getVerb())) { response = buildNoRecordsFoundOaiResponse(oaipmh, request); - } else if (recordsMap.isEmpty() && jsonArrayNotEmptyCheck(items) && VerbType.GET_RECORD == request.getVerb()) { + } else if (theByteArrayCannotBeConvertedToJaxbObjectResultCheck(recordsMap, items, request.getVerb())) { response = buildTheByteArrayCannotBeConvertedToJaxbObjectResponse(oaipmh, request); } else { addRecordsToOaiResponse(oaipmh, recordsMap.values()); @@ -488,11 +487,13 @@ protected Future processRecords(Context ctx, Request request, return oaiResponsePromise.future(); } - private boolean jsonArrayNotEmptyCheck(JsonArray ja){ - return ja != null && !ja.isEmpty(); + boolean noRecordsFoundResultCheck(Map recordsMap, JsonArray items, VerbType verb){ + return (recordsMap.isEmpty() && ObjectUtils.isEmpty(items)) || + (recordsMap.isEmpty() && ObjectUtils.isNotEmpty(items) && VerbType.GET_RECORD != verb); } - private boolean jsonArrayIsEmptyCheck(JsonArray ja){ - return !jsonArrayNotEmptyCheck(ja); + + boolean theByteArrayCannotBeConvertedToJaxbObjectResultCheck(Map recordsMap, JsonArray items, VerbType verb){ + return recordsMap.isEmpty() && ObjectUtils.isNotEmpty(items) && VerbType.GET_RECORD == verb; } /** * Builds {@link Map} with storage id as key and {@link RecordType} with populated header if there is any, @@ -506,7 +507,7 @@ private Future> buildRecords(Context context, Request re Map recordsMap = new ConcurrentHashMap<>(); - if (jsonArrayNotEmptyCheck(records)) { + if (records != null && !records.isEmpty()) { RecordMetadataManager metadataManager = RecordMetadataManager.getInstance(); // Using LinkedHashMap just to rely on order returned by storage service records.stream() diff --git a/src/test/java/org/folio/rest/impl/OaiPmhImplTest.java b/src/test/java/org/folio/rest/impl/OaiPmhImplTest.java index 6f4bc282..f3973004 100644 --- a/src/test/java/org/folio/rest/impl/OaiPmhImplTest.java +++ b/src/test/java/org/folio/rest/impl/OaiPmhImplTest.java @@ -761,7 +761,6 @@ void headerDatestampOfGetRecordVerbShouldCorrespondToGranularitySetting(Metadata void invalidCharacterInTheRecordTest() { MetadataPrefix prefix = MARC21XML; String identifier = IDENTIFIER_PREFIX + OkapiMockServer.EXISTING_IDENTIFIER_WITH_INVALID_CHARACTER; -// String identifier = IDENTIFIER_PREFIX + OkapiMockServer.EXISTING_IDENTIFIER;//_WITH_INVALID_CHARACTER; RequestSpecification request = createBaseRequest() .with()