From c9cb6e07fe13a6fd88e7643514f061572acf26c7 Mon Sep 17 00:00:00 2001 From: "Stefan E. Funk" <funk@sub.uni-goettingen.de> Date: Fri, 18 Oct 2019 18:05:27 +0200 Subject: [PATCH] =?UTF-8?q?Only=20include=20schemaLocations=20if=20dc=20an?= =?UTF-8?q?d=20oai=5Fdc=20used=20in=20response.=20Thought=20prefixes=20are?= =?UTF-8?q?=20always=20plotted.=20Hm.=20Doesn=C3=84t=20matter.=20I=20hsupp?= =?UTF-8?q?ose.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../info/textgrid/middleware/OAIPMHImpl.java | 32 +++++++++++++------ .../textgrid/middleware/OAIPMHProducer.java | 6 ++-- .../textgrid/middleware/OaiPmhClient.java | 2 -- .../info/textgrid/middleware/OaiPmhTest.java | 1 + 4 files changed, 26 insertions(+), 15 deletions(-) diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java index e3b59855..d68b47d9 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java @@ -41,10 +41,12 @@ public class OAIPMHImpl implements OAIPMHProducer { // FINALS // ** - private static final String SCHEMA_LOCATIONS = - "http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd " - + "http://www.openarchives.org/OAI/2.0/ https://www.openarchives.org/OAI/2.0/OAI-PMH.xsd " - + "http://purl.org/dc/elements/1.1/ https://dublincore.org/schemas/xmls/simpledc20021212.xsd"; + private static final String OAIPMH_SCHEMA_LOCATION = + "http://www.openarchives.org/OAI/2.0/ https://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"; + private static final String OAIDC_SCHEMA_LOCATION = + "http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd"; + private static final String DC_SCHEMA_LOCATION = + "http://purl.org/dc/elements/1.1/ https://dublincore.org/schemas/xmls/simpledc20021212.xsd"; // ** // STATICS @@ -117,7 +119,7 @@ public class OAIPMHImpl implements OAIPMHProducer { String result = ""; try { - result = getStringFromJAXBOAIElement( + result = getStringFromJAXBOAIElement(verb, handleRequest(verb, identifier, metadataPrefix, set, from, until, resumptionToken)); } catch (ParseException e) { // TODO Auto-generated catch block @@ -139,7 +141,7 @@ public class OAIPMHImpl implements OAIPMHProducer { String result = ""; try { - result = getStringFromJAXBOAIElement( + result = getStringFromJAXBOAIElement(verb, handleRequest(verb, identifier, metadataPrefix, set, from, until, resumptionToken)); } catch (ParseException e) { // TODO Auto-generated catch block @@ -658,21 +660,33 @@ public class OAIPMHImpl implements OAIPMHProducer { * other way has been working here! I tried EVERYTHING else! Really! * </p> * + * @param theVerb * @param theJAXBOAIElement * @return */ - private static String getStringFromJAXBOAIElement( + private static String getStringFromJAXBOAIElement(final String theVerb, final JAXBElement<OAIPMHtype> theJAXBOAIElement) { String result = ""; + // Always add OAIPMH schema location. + String schemaLocations = OAIPMH_SCHEMA_LOCATION; + // Add OAI_DC and DC schema location if needed. + if (theVerb.equals("GetRecord") || theVerb.endsWith("ListRecords")) { + schemaLocations += OAIDC_SCHEMA_LOCATION + " " + DC_SCHEMA_LOCATION; + } + + // PLEASE NOTE We always get oai_dc and dc prefixes defined in the root element due to the + // bindings.xml file. Seems to be no problem for the time being. + try { - // FIXME GEMOKEL: Add schemaLocations to OAI root element. + // OBACHT! GEMOKEL! Add schemaLocations to OAI root element here! JAXBContext jc = JAXBContext.newInstance(OAIPMHtype.class); Marshaller marshaller = jc.createMarshaller(); + // Comment out if one-line-output wanted! marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); - marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, SCHEMA_LOCATIONS); + marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, schemaLocations); StringWriter sw = new StringWriter(); marshaller.marshal(theJAXBOAIElement, sw); diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java index 00e40ddd..77d71174 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHProducer.java @@ -1,15 +1,13 @@ package info.textgrid.middleware; -import info.textgrid.middleware.oaipmh.OAIPMHtype; +import javax.ws.rs.DefaultValue; +import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; -import javax.ws.rs.DefaultValue; -import javax.ws.rs.FormParam; import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBElement; /** * <p> diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OaiPmhClient.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OaiPmhClient.java index 8705269a..299b78fb 100644 --- a/oaipmh-core/src/main/java/info/textgrid/middleware/OaiPmhClient.java +++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OaiPmhClient.java @@ -1,12 +1,10 @@ package info.textgrid.middleware; -import info.textgrid.middleware.oaipmh.OAIPMHtype; import java.text.ParseException; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.xml.bind.JAXBElement; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; /** diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java index 3257291e..a3bdc2e3 100644 --- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java +++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java @@ -468,6 +468,7 @@ public class OaiPmhTest { OaiPmhTest.identifierList.setIdentifierField("textgridUri"); OaiPmhTest.identifierList.setRepositoryObjectURIPrefix("textgrid:"); OaiPmhTest.identifierList.setSearchResponseSize("100"); + String r = this.request.getRequest("", "", "", "", "", "", ""); System.out.println(r); System.out.println("-----------------------------------\n"); -- GitLab