diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java index d060ca3105e..2c73c5ad36e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -102,7 +102,7 @@ import java.util.Arrays; import java.util.Date; import java.util.Optional; -import javax.persistence.NoResultException; +import javax.xml.stream.XMLStreamException; /** * A REST API for dataverses. @@ -325,7 +325,7 @@ public Response importDataset(String jsonBody, @PathParam("identifier") String p // TODO decide if I merge importddi with import just below (xml and json on same api, instead of 2 api) @POST @Path("{identifier}/datasets/:importddi") - public Response importDatasetDdi(String xml, @PathParam("identifier") String parentIdtf, @QueryParam("pid") String pidParam, @QueryParam("release") String releaseParam) throws ImportException { + public Response importDatasetDdi(String xml, @PathParam("identifier") String parentIdtf, @QueryParam("pid") String pidParam, @QueryParam("release") String releaseParam) { try { User u = findUserOrDie(); if (!u.isSuperuser()) { @@ -335,9 +335,12 @@ public Response importDatasetDdi(String xml, @PathParam("identifier") String par Dataset ds = null; try { ds = jsonParser().parseDataset(importService.ddiToJson(xml)); - } - catch (JsonParseException jpe) { - return badRequest("Error parsing datas as Json: "+jpe.getMessage()); + } catch (JsonParseException jpe) { + return badRequest("Error parsing data as Json: "+jpe.getMessage()); + } catch (ImportException e) { + return badRequest("Invalid DOI found in the XML: "+e.getMessage()); + } catch (XMLStreamException e) { + return badRequest("Invalid file content: "+e.getMessage()); } ds.setOwner(owner); if (nonEmpty(pidParam)) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java index ce2f646322c..52459dc3c31 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportDDIServiceBean.java @@ -171,12 +171,15 @@ public Map mapDDI(ImportType importType, File ddiFile, DatasetD } private void processDDI(ImportType importType, XMLStreamReader xmlr, DatasetDTO datasetDTO, Map filesMap) throws XMLStreamException, ImportException { - // make sure we have a codeBook //while ( xmlr.next() == XMLStreamConstants.COMMENT ); // skip pre root comments - xmlr.nextTag(); - xmlr.require(XMLStreamConstants.START_ELEMENT, null, "codeBook"); - + try { + xmlr.nextTag(); + xmlr.require(XMLStreamConstants.START_ELEMENT, null, "codeBook"); + } catch( XMLStreamException e) { + throw new XMLStreamException("It doesn't start with the XML element "); + } + // Some DDIs provide an ID in the section. // We are going to treat it as just another otherId. // (we've seen instances where this ID was the only ID found in diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java index b75811e6698..9f7444f028c 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportServiceBean.java @@ -390,14 +390,8 @@ public Dataset doImportHarvestedDataset(DataverseRequest dataverseRequest, Harve return importedDataset; } - public JsonObject ddiToJson(String xmlToParse) throws ImportException{ - DatasetDTO dsDTO = null; - - try { - dsDTO = importDDIService.doImport(ImportType.IMPORT, xmlToParse); - } catch (XMLStreamException e) { - throw new ImportException("XMLStreamException" + e); - } + public JsonObject ddiToJson(String xmlToParse) throws ImportException, XMLStreamException { + DatasetDTO dsDTO = importDDIService.doImport(ImportType.IMPORT, xmlToParse); // convert DTO to Json, Gson gson = new GsonBuilder().setPrettyPrinting().create(); String json = gson.toJson(dsDTO);