From 6bd73e151fd98e21adb60a815b9fe1a96218a64c Mon Sep 17 00:00:00 2001 From: "Igor A. Zelaya" Date: Wed, 9 Sep 2026 19:57:18 -0600 Subject: [PATCH] Fix escaped OAI direct API URL Avoid pre-escaping the query separator before XOAI serializes the XML attribute, and cover the parsed directApiCall value in the harvesting integration test. --- .../server/xoai/DataverseXoaiItemRepository.java | 2 +- .../harvard/iq/dataverse/api/HarvestingServerIT.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java b/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java index 93679c7812b..13ba83c62f6 100644 --- a/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java +++ b/src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/DataverseXoaiItemRepository.java @@ -262,7 +262,7 @@ private Metadata getDatasetMetadata(Dataset dataset, String metadataPrefix) thro private String customDataverseJsonApiUri(String identifier) { String ret = serverUrl - + "/api/datasets/export?exporter=dataverse_json&persistentId=" + + "/api/datasets/export?exporter=dataverse_json&persistentId=" + identifier; return ret; diff --git a/src/test/java/edu/harvard/iq/dataverse/api/HarvestingServerIT.java b/src/test/java/edu/harvard/iq/dataverse/api/HarvestingServerIT.java index 57a12224c89..70b45cbb554 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/HarvestingServerIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/HarvestingServerIT.java @@ -574,6 +574,18 @@ public void testSingleRecordOaiSet() throws InterruptedException { assertEquals("Darwin's finches (also known as the Galápagos finches) are a group of about fifteen species of passerine birds.", responseXmlPath.getString("OAI-PMH.GetRecord.record.metadata.dc.description")); assertEquals("Medicine, Health and Life Sciences", responseXmlPath.getString("OAI-PMH.GetRecord.record.metadata.dc.subject")); + + Response dataverseJsonRecordResponse = + UtilIT.getOaiRecord(singleSetDatasetPersistentId, "dataverse_json"); + assertEquals(OK.getStatusCode(), dataverseJsonRecordResponse.getStatusCode()); + responseXmlPath = validateOaiVerbResponse(dataverseJsonRecordResponse, "GetRecord"); + String directApiCall = + responseXmlPath.getString( + "OAI-PMH.GetRecord.record.metadata.dataverse_json.@directApiCall"); + assertTrue( + directApiCall.endsWith( + "/api/datasets/export?exporter=dataverse_json&persistentId=" + + singleSetDatasetPersistentId)); // ok, looks legit!