Skip to content

Commit 9792ab0

Browse files
authored
Merge pull request #7974 from pkiraly/7431-fixing-invalid-OAI-PMH-response
7431 fixing invalid oai pmh response
2 parents bd65e1a + 2adfa43 commit 9792ab0

File tree

5 files changed

+27
-9
lines changed

5 files changed

+27
-9
lines changed

src/main/java/edu/harvard/iq/dataverse/harvest/server/web/servlet/OAIServlet.java

-4
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,9 @@
4646

4747
import java.io.IOException;
4848
import java.io.OutputStream;
49-
import java.io.OutputStreamWriter;
50-
import java.io.Writer;
5149
import java.util.Date;
5250
import java.util.HashMap;
5351
import java.util.logging.Logger;
54-
import java.util.zip.DeflaterOutputStream;
55-
import java.util.zip.GZIPOutputStream;
5652
import javax.ejb.EJB;
5753
import javax.mail.internet.InternetAddress;
5854
import javax.servlet.ServletConfig;

src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/XlistRecords.java

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
package edu.harvard.iq.dataverse.harvest.server.xoai;
32

43
import com.lyncode.xml.exceptions.XmlWriteException;

src/main/java/edu/harvard/iq/dataverse/harvest/server/xoai/Xrecord.java

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
package edu.harvard.iq.dataverse.harvest.server.xoai;
32

43
import com.lyncode.xoai.model.oaipmh.Header;
@@ -17,6 +16,7 @@
1716
import java.io.OutputStream;
1817
import java.net.InetAddress;
1918
import java.net.UnknownHostException;
19+
import org.apache.poi.util.ReplacingInputStream;
2020

2121
/**
2222
*
@@ -85,7 +85,11 @@ public void writeToStream(OutputStream outputStream) throws IOException {
8585
if (dataset != null && formatName != null) {
8686
InputStream inputStream = null;
8787
try {
88-
inputStream = ExportService.getInstance().getExport(dataset, formatName);
88+
inputStream = new ReplacingInputStream(
89+
ExportService.getInstance().getExport(dataset, formatName),
90+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>",
91+
""
92+
);
8993
} catch (ExportException ex) {
9094
inputStream = null;
9195
}
@@ -101,7 +105,6 @@ public void writeToStream(OutputStream outputStream) throws IOException {
101105
}
102106
}
103107
outputStream.flush();
104-
105108
}
106109

107110
private String itemHeaderToString(Header header) {

src/test/java/edu/harvard/iq/dataverse/api/HarvestingServerIT.java

+15
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import static com.jayway.restassured.RestAssured.given;
1919
import java.util.List;
2020
import static junit.framework.Assert.assertEquals;
21+
import static org.junit.Assert.assertFalse;
2122
import static org.junit.Assert.assertNotNull;
2223

2324
/**
@@ -163,6 +164,20 @@ public void testOaiFunctionality() throws InterruptedException {
163164
// And the record should be the dataset we have just created:
164165
assertEquals(datasetPersistentId, listIdentifiersResponse.getBody().xmlPath().getString("OAI-PMH.ListIdentifiers.header.identifier"));
165166

167+
Response listRecordsResponse = UtilIT.getOaiListRecords(setName, "oai_dc");
168+
assertEquals(OK.getStatusCode(), listRecordsResponse.getStatusCode());
169+
List listRecords = listRecordsResponse.getBody().xmlPath().getList("OAI-PMH.ListRecords.record");
170+
171+
assertNotNull(listRecords);
172+
assertEquals(1, listRecords.size());
173+
assertEquals(datasetPersistentId, listRecordsResponse.getBody().xmlPath().getString("OAI-PMH.ListRecords.record[0].header.identifier"));
174+
175+
// assert that Datacite format does not contain the XML prolog
176+
Response listRecordsResponseDatacite = UtilIT.getOaiListRecords(setName, "Datacite");
177+
assertEquals(OK.getStatusCode(), listRecordsResponseDatacite.getStatusCode());
178+
String body = listRecordsResponseDatacite.getBody().asString();
179+
assertFalse(body.contains("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"));
180+
166181
// And now run GetRecord on the OAI record for the dataset:
167182
Response getRecordResponse = UtilIT.getOaiRecord(datasetPersistentId, "oai_dc");
168183

src/test/java/edu/harvard/iq/dataverse/api/UtilIT.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -2359,7 +2359,12 @@ static Response getOaiListIdentifiers(String setName, String metadataFormat) {
23592359
String apiPath = String.format("/oai?verb=ListIdentifiers&set=%s&metadataPrefix=%s", setName, metadataFormat);
23602360
return given().get(apiPath);
23612361
}
2362-
2362+
2363+
static Response getOaiListRecords(String setName, String metadataFormat) {
2364+
String apiPath = String.format("/oai?verb=ListRecords&set=%s&metadataPrefix=%s", setName, metadataFormat);
2365+
return given().get(apiPath);
2366+
}
2367+
23632368
static Response changeAuthenticatedUserIdentifier(String oldIdentifier, String newIdentifier, String apiToken) {
23642369
Response response;
23652370
String path = String.format("/api/users/%s/changeIdentifier/%s", oldIdentifier, newIdentifier );

0 commit comments

Comments
 (0)