From 1b3f042d9630002fa26f06eb61ada516fc817dec Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 11 Aug 2026 12:55:28 -0400 Subject: [PATCH 1/5] createReader and createWriterFactory replacements, add JsonUtil factory creation (cherry picked from commit eb14cd0294dc00fcbc60633a5b495910bfd02641) --- .../iq/dataverse/EditDatafilesPage.java | 6 +-- .../harvard/iq/dataverse/api/Dataverses.java | 2 +- .../edu/harvard/iq/dataverse/api/Files.java | 12 +++--- .../iq/dataverse/util/json/JSONLDUtil.java | 27 ++++++------ .../iq/dataverse/util/json/JsonUtil.java | 43 +++++++++++-------- 5 files changed, 46 insertions(+), 44 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java b/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java index 46d17d05363..56831834c31 100644 --- a/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java +++ b/src/main/java/edu/harvard/iq/dataverse/EditDatafilesPage.java @@ -52,6 +52,8 @@ import java.util.Map; import java.util.Optional; import java.util.logging.Logger; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.EJBException; import jakarta.faces.application.FacesMessage; @@ -1451,9 +1453,7 @@ public void handleDropBoxUpload(ActionEvent event) { // ----------------------------------------------------------- // Read JSON object from the output of the DropBox Chooser: // ----------------------------------------------------------- - JsonReader dbJsonReader = Json.createReader(new StringReader(dropBoxSelection)); - JsonArray dbArray = dbJsonReader.readArray(); - dbJsonReader.close(); + JsonArray dbArray = JsonUtil.getJsonArray(dropBoxSelection); // ----------------------------------------------------------- // Iterate through the Dropbox file information (JSON) 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 28a67237af1..1e490f52d7b 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Dataverses.java @@ -893,7 +893,7 @@ public Response updateInputLevels(@Context ContainerRequestContext crc, String jsonBody) { try { Dataverse dataverse = findDataverseOrDie(identifier); - List newInputLevels = parseInputLevels(Json.createReader(new StringReader(jsonBody)).readArray(), dataverse); + List newInputLevels = parseInputLevels(JsonUtil.getJsonArray(jsonBody), dataverse); execCommand(new UpdateDataverseInputLevelsCommand(dataverse, createDataverseRequest(getRequestUser(crc)), newInputLevels)); return ok(BundleUtil.getStringFromBundle("dataverse.update.success"), JsonPrinter.json(dataverse)); } catch (WrappedResponse e) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Files.java b/src/main/java/edu/harvard/iq/dataverse/api/Files.java index 6983a06d07a..7d4c63d7f98 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Files.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Files.java @@ -158,8 +158,8 @@ public Response restrictFileInDataset(@Context ContainerRequestContext crc, if (restrictStr != null && restrictStr.trim().startsWith("{")) { // process as json jakarta.json.JsonObject jsonObject; - try (StringReader stringReader = new StringReader(restrictStr)) { - jsonObject = Json.createReader(stringReader).readObject(); + try { + jsonObject = JsonUtil.getJsonObject(restrictStr); if (jsonObject.containsKey("restrict")) { restrict = Boolean.valueOf(jsonObject.getBoolean("restrict")); returnMessage += restrict ? "restricted." : "unrestricted."; @@ -1152,8 +1152,8 @@ public Response setFileCategories(@Context ContainerRequestContext crc, return response(req -> { DataFile dataFile = execCommand(new GetDataFileCommand(req, findDataFileOrDie(dataFileId))); jakarta.json.JsonObject jsonObject; - try (StringReader stringReader = new StringReader(jsonBody)) { - jsonObject = Json.createReader(stringReader).readObject(); + try { + jsonObject = JsonUtil.getJsonObject(jsonBody); JsonArray requestedCategoriesJson = jsonObject.getJsonArray("categories"); FileMetadata fileMetadata = dataFile.getFileMetadata(); if (replaceData) { @@ -1190,8 +1190,8 @@ public Response setFileTabularTags(@Context ContainerRequestContext crc, return badRequest(BundleUtil.getStringFromBundle("files.api.only.tabular.supported")); } jakarta.json.JsonObject jsonObject; - try (StringReader stringReader = new StringReader(jsonBody)) { - jsonObject = Json.createReader(stringReader).readObject(); + try { + jsonObject = JsonUtil.getJsonObject(jsonBody); JsonArray requestedTabularTagsJson = jsonObject.getJsonArray("tabularTags"); if (replaceData) { dataFile.setTags(Lists.newArrayList()); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java index 126f0bac83d..3b15c303601 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JSONLDUtil.java @@ -540,21 +540,18 @@ public static void populateContext(MetadataBlockServiceBean metadataBlockSvc) { public static JsonObject decontextualizeJsonLD(String jsonLDString) { logger.fine(jsonLDString); - try (StringReader rdr = new StringReader(jsonLDString)) { - + try { + JsonObject jsonld = JsonUtil.getJsonObject(jsonLDString); + JsonDocument doc = JsonDocument.of(jsonld); // Use JsonLd to expand/compact to localContext - try (JsonReader jsonReader = Json.createReader(rdr)) { - JsonObject jsonld = jsonReader.readObject(); - JsonDocument doc = JsonDocument.of(jsonld); - JsonArray array = JsonLd.expand(doc).get(); - jsonld = JsonLd.compact(JsonDocument.of(array), JsonDocument.of(JsonUtil.createObjectBuilder().build())).get(); - // jsonld = array.getJsonObject(0); - logger.fine("Decontextualized object: " + jsonld); - return jsonld; - } catch (JsonLdError e) { - logger.warning(e.getMessage()); - return null; - } + JsonArray array = JsonLd.expand(doc).get(); + jsonld = JsonLd.compact(JsonDocument.of(array), JsonDocument.of(JsonUtil.createObjectBuilder().build())).get(); + // jsonld = array.getJsonObject(0); + logger.fine("Decontextualized object: " + jsonld); + return jsonld; + } catch (JsonLdError e) { + logger.warning(e.getMessage()); + return null; } } @@ -582,7 +579,7 @@ public static String prettyPrint(JsonValue val) { StringWriter sw = new StringWriter(); Map properties = new HashMap<>(1); properties.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory writerFactory = Json.createWriterFactory(properties); + JsonWriterFactory writerFactory = JsonUtil.createWriterFactory(properties); JsonWriter jsonWriter = writerFactory.createWriter(sw); jsonWriter.write(val); jsonWriter.close(); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java index 807fc0cfca3..a06bb82bc5d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java @@ -32,6 +32,19 @@ public class JsonUtil { private static final Logger logger = Logger.getLogger(JsonUtil.class.getCanonicalName()); + /** + * A provider to create Jakarta JSON-P Factories and Builders such as {@code JsonObjectBuilder} and {@code JsonArrayBuilder}. + * This is a thread-safe, static, and final instance to manage JSON builder creation. + * + *

Using a one-time initialized factory avoids a classpath-scan on every invocation of + * {@code JsonUtil.createArrayBuilder()} or {@code JsonUtil.createObjectBuilder()}, creating non-neglible performance issues. + *

+ * + *

See also JSON-P #26, + * Yasson #698 and others.

+ */ + private static final JsonProvider provider = JsonProvider.provider(); + private JsonUtil() {} /** @@ -54,7 +67,7 @@ public static String prettyPrint(String jsonString) { public static String prettyPrint(JsonArray jsonArray) { Map config = new HashMap<>(); config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(config); + JsonWriterFactory jsonWriterFactory = provider.createWriterFactory(config); StringWriter stringWriter = new StringWriter(); try (JsonWriter jsonWriter = jsonWriterFactory.createWriter(stringWriter)) { jsonWriter.writeArray(jsonArray); @@ -65,7 +78,7 @@ public static String prettyPrint(JsonArray jsonArray) { public static String prettyPrint(JsonObject jsonObject) { Map config = new HashMap<>(); config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(config); + JsonWriterFactory jsonWriterFactory = provider.createWriterFactory(config); StringWriter stringWriter = new StringWriter(); try (JsonWriter jsonWriter = jsonWriterFactory.createWriter(stringWriter)) { jsonWriter.writeObject(jsonObject); @@ -85,7 +98,7 @@ public static String prettyPrint(JsonObject jsonObject) { */ public static JsonObject getJsonObject(String serializedJson) { try (StringReader rdr = new StringReader(serializedJson)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { + try (JsonReader jsonReader = provider.createReader(rdr)) { return jsonReader.readObject(); } } @@ -103,7 +116,7 @@ public static JsonObject getJsonObject(String serializedJson) { * @see #getJsonObjectFromFile(String) */ public static JsonObject getJsonObjectFromInputStream(InputStream stream) { - try (JsonReader jsonReader = Json.createReader(stream)) { + try (JsonReader jsonReader = provider.createReader(stream)) { return jsonReader.readObject(); } } @@ -120,7 +133,7 @@ public static JsonObject getJsonObjectFromInputStream(InputStream stream) { */ public static JsonObject getJsonObjectFromFile(String fileName) throws IOException { try (FileReader rdr = new FileReader(fileName)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { + try (JsonReader jsonReader = provider.createReader(rdr)) { return jsonReader.readObject(); } } @@ -136,7 +149,7 @@ public static JsonObject getJsonObjectFromFile(String fileName) throws IOExcepti */ public static JsonArray getJsonArray(String serializedJson) { try (StringReader rdr = new StringReader(serializedJson)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { + try (JsonReader jsonReader = provider.createReader(rdr)) { return jsonReader.readArray(); } } @@ -159,7 +172,7 @@ public static JsonValue getJsonValue(String serializedJson) { } try (StringReader rdr = new StringReader(serializedJson)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { + try (JsonReader jsonReader = provider.createReader(rdr)) { JsonValue jsonValue = jsonReader.read(); if (jsonValue.getValueType() == JsonValue.ValueType.OBJECT) { return jsonValue.asJsonObject(); @@ -172,18 +185,6 @@ public static JsonValue getJsonValue(String serializedJson) { } } - /** - * A provider to create Jakarta JSON-P Builders such as {@code JsonObjectBuilder} and {@code JsonArrayBuilder}. - * This is a thread-safe, static, and final instance to manage JSON builder creation. - * - *

Using a one-time initialized factory avoids a classpath-scan on every invocation of - * {@code JsonUtil.createArrayBuilder()} or {@code JsonUtil.createObjectBuilder()}, creating non-neglible performance issues. - *

- * - *

See also JSON-P #26, - * Yasson #698 and others.

- */ - private static final JsonProvider provider = JsonProvider.provider(); /** * Create a new {@link JsonObjectBuilder} from a cached provider instance. @@ -301,4 +302,8 @@ public static JsonNumber createValue(BigDecimal value){ public static JsonNumber createValue(BigInteger value){ return provider.createValue(value); } + + public static JsonWriterFactory createWriterFactory(Map properties) { + return provider.createWriterFactory(properties); + } } From cff3ac82f6f0ea8e522e1f5cdcd83e7da0e16709 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 11 Aug 2026 13:50:56 -0400 Subject: [PATCH 2/5] more replacements, update JsonUtil and forbidden to block all Json. methods that call provider. internally. (cherry picked from commit eead50ee29c34915e7582aa87e955594c93a6e9b) --- .../iq/dataverse/DatasetFieldServiceBean.java | 17 +- .../edu/harvard/iq/dataverse/api/Admin.java | 7 +- .../iq/dataverse/api/HarvestingServer.java | 21 +- .../edu/harvard/iq/dataverse/api/Util.java | 8 +- .../api/imports/ImportGenericServiceBean.java | 6 +- .../providers/oauth2/impl/GitHubOAuth2AP.java | 12 +- .../providers/oauth2/impl/GoogleOAuth2AP.java | 13 +- .../oauth2/impl/MicrosoftOAuth2AP.java | 11 +- .../providers/oauth2/impl/OrcidOAuth2AP.java | 16 +- .../export/croissant/CroissantExportUtil.java | 9 +- .../dataverse/globus/GlobusServiceBean.java | 11 +- .../iq/dataverse/pidproviders/PidUtil.java | 10 +- .../iq/dataverse/util/SystemConfig.java | 18 +- .../json/InAppNotificationsJsonPrinter.java | 11 +- .../iq/dataverse/util/json/JsonUtil.java | 105 ++++++++- src/maven/forbiddenapis.txt | 29 ++- ...setFieldServiceBeanFilterResponseTest.java | 10 +- .../iq/dataverse/DatasetVersionTest.java | 12 +- .../iq/dataverse/api/AbstractApiBeanTest.java | 19 +- .../edu/harvard/iq/dataverse/api/AdminIT.java | 7 +- .../api/DatasetFieldServiceApiTest.java | 9 +- .../harvard/iq/dataverse/api/DatasetsIT.java | 25 +-- .../iq/dataverse/api/DataversesIT.java | 8 +- .../iq/dataverse/api/ExternalToolsIT.java | 6 +- .../iq/dataverse/api/JsonLDExportIT.java | 8 +- .../edu/harvard/iq/dataverse/api/LinkIT.java | 16 +- .../edu/harvard/iq/dataverse/api/MoveIT.java | 7 +- .../DataCaptureModuleServiceBeanIT.java | 6 +- .../export/CroissantExporterSlimTest.java | 192 ++++++----------- .../export/CroissantExporterTest.java | 204 +++--------------- .../iq/dataverse/export/DDIExporterTest.java | 6 +- .../export/OpenAireExporterTest.java | 17 +- .../croissant/CroissantExportUtilTest.java | 20 +- .../dublincore/DublinCoreExportUtilTest.java | 9 +- .../dataverse/feedback/FeedbackUtilTest.java | 24 +-- .../makedatacount/MakeDataCountUtilTest.java | 14 +- .../dataverse/util/json/JsonParserTest.java | 46 ++-- 37 files changed, 357 insertions(+), 612 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index 61821022301..3f1acf7fa2f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -2,7 +2,6 @@ import edu.harvard.iq.dataverse.dataset.DatasetType; import java.io.IOException; -import java.io.StringReader; import java.net.URI; import java.net.URISyntaxException; import java.net.URLEncoder; @@ -24,13 +23,11 @@ import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.inject.Named; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonException; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonReader; import jakarta.json.JsonString; import jakarta.json.JsonValue; import jakarta.json.JsonValue.ValueType; @@ -299,8 +296,8 @@ public Map getCVocConf(boolean byTermUriField){ cvocMapByTermUri=new HashMap<>(); cvocFieldSet = new HashSet<>(); - try (JsonReader jsonReader = Json.createReader(new StringReader(settingsService.getValueForKey(SettingsServiceBean.Key.CVocConf)))) { - JsonArray cvocConfJsonArray = jsonReader.readArray(); + try { + JsonArray cvocConfJsonArray = JsonUtil.getJsonArray(settingsService.getValueForKey(SettingsServiceBean.Key.CVocConf)); for (JsonObject jo : cvocConfJsonArray.getValuesAs(JsonObject.class)) { DatasetFieldType dft = findByNameOpt(jo.getString("field-name")); if (dft == null) { @@ -346,7 +343,7 @@ public Map getCVocConf(boolean byTermUriField){ } } } - } catch(JsonException e) { + } catch(JsonException e) { logger.warning("Ignoring External Vocabulary setting due to parsing error: " + e.getLocalizedMessage()); } return byTermUriField ? cvocMapByTermUri : cvocMap; @@ -480,8 +477,8 @@ public JsonObject getExternalVocabularyValue(String termUri) { ExternalVocabularyValue.class) .setParameter("uri", termUri).getSingleResult(); String valString = evv.getValue(); - try (JsonReader jr = Json.createReader(new StringReader(valString))) { - return jr.readObject(); + try { + return JsonUtil.getJsonObject(valString); } catch (Exception e) { logger.warning("Problem parsing external vocab value for uri: " + termUri + " : " + e.getMessage()); } @@ -583,8 +580,8 @@ public void process(HttpResponse response, HttpContext context) throws IOExcepti int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 200) { logger.fine("Returned data: " + data); - try (JsonReader jsonReader = Json.createReader(new StringReader(data))) { - String dataObj = filterResponse(cvocEntry, jsonReader.readObject(), term).toString(); + try { + String dataObj = filterResponse(cvocEntry, JsonUtil.getJsonObject(data), term).toString(); evv.setValue(dataObj); evv.setLastUpdateDate(Timestamp.from(Instant.now())); logger.fine("JsonObject: " + dataObj); diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Admin.java b/src/main/java/edu/harvard/iq/dataverse/api/Admin.java index 38209ebdd94..dbe1ae176e7 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Admin.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Admin.java @@ -54,7 +54,6 @@ import edu.harvard.iq.dataverse.engine.command.impl.AbstractSubmitToArchiveCommand; import edu.harvard.iq.dataverse.engine.command.impl.PublishDataverseCommand; import edu.harvard.iq.dataverse.settings.Setting; -import jakarta.json.Json; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; import jakarta.ws.rs.Consumes; @@ -71,7 +70,6 @@ import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder; import java.io.InputStream; -import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; @@ -81,7 +79,6 @@ import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.validation.ConstraintViolation; import jakarta.validation.ConstraintViolationException; import jakarta.ws.rs.Produces; @@ -1612,9 +1609,7 @@ public Response startConfirmEmailProcess(@Parameter(description = "Authenticated description = "Rewrites a built-in user's password hash to the legacy SHA-1 test value.") public Response convertUserFromBcryptToSha1(@RequestBody(description = "JSON object containing builtinUserId.") String json) { - JsonReader jsonReader = Json.createReader(new StringReader(json)); - JsonObject object = jsonReader.readObject(); - jsonReader.close(); + JsonObject object = JsonUtil.getJsonObject(json); BuiltinUser builtinUser = builtinUserService.find(new Long(object.getInt("builtinUserId"))); builtinUser.updateEncryptedPassword("4G7xxL9z11/JKN4jHPn4g9iIQck=", 0); // password is "sha-1Pass", 0 means // SHA-1 diff --git a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java index 989ab160d27..0a643533bb4 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/HarvestingServer.java @@ -15,14 +15,11 @@ import jakarta.json.JsonObjectBuilder; import static edu.harvard.iq.dataverse.util.json.NullSafeJsonBuilder.jsonObjectBuilder; import java.io.IOException; -import java.io.StringReader; import java.util.List; import java.util.logging.Logger; import java.util.regex.Pattern; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; -import jakarta.json.Json; -import jakarta.json.JsonReader; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObject; import jakarta.ws.rs.DELETE; @@ -145,13 +142,9 @@ public Response createOaiSet(@Context ContainerRequestContext crc, return badRequest(BundleUtil.getStringFromBundle("harvestserver.newSetDialog.setspec.superUser.required")); } - StringReader rdr = new StringReader(jsonBody); - - try( JsonReader jrdr = Json.createReader(rdr) ) - { - JsonObject json = jrdr.readObject(); + JsonObject json = JsonUtil.getJsonObject(jsonBody); - OAISet set = new OAISet(); + OAISet set = new OAISet(); String name, desc, defn; @@ -194,8 +187,6 @@ public Response createOaiSet(@Context ContainerRequestContext crc, set.setDefinition(defn); oaiSetService.save(set); return created("/harvest/server/oaisets" + name, oaiSetAsJson(set)); - } - } @PUT @@ -221,11 +212,8 @@ public Response modifyOaiSet(@Context ContainerRequestContext crc, return badRequest(BundleUtil.getStringFromBundle("harvestserver.newSetDialog.setspec.superUser.required")); } - StringReader rdr = new StringReader(jsonBody); - - try (JsonReader jrdr = Json.createReader(rdr)) { - JsonObject json = jrdr.readObject(); - OAISet update; + JsonObject json = JsonUtil.getJsonObject(jsonBody); + OAISet update; //Validating spec if (!StringUtils.isEmpty(spec)) { update = oaiSetService.findBySpec(spec); @@ -256,7 +244,6 @@ public Response modifyOaiSet(@Context ContainerRequestContext crc, update.setDefinition(defn); oaiSetService.save(update); return ok("/harvest/server/oaisets" + spec, oaiSetAsJson(update)); - } } @DELETE diff --git a/src/main/java/edu/harvard/iq/dataverse/api/Util.java b/src/main/java/edu/harvard/iq/dataverse/api/Util.java index 25855769a38..4a919e4c796 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/Util.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/Util.java @@ -7,9 +7,9 @@ import java.util.TimeZone; import java.util.TreeSet; import java.util.stream.Collectors; -import jakarta.json.Json; + +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonArray; -import jakarta.json.JsonReader; public class Util { @@ -30,9 +30,7 @@ public class Util { } static JsonArray asJsonArray( String str ) { - try ( JsonReader rdr = Json.createReader(new StringReader(str)) ) { - return rdr.readArray(); - } + return JsonUtil.getJsonArray(str); } static boolean isBoolean( String s ) { diff --git a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java index d75ea42e433..44f640b1848 100644 --- a/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/api/imports/ImportGenericServiceBean.java @@ -34,16 +34,15 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.EJBException; import jakarta.ejb.Stateless; import jakarta.inject.Named; -import jakarta.json.Json; import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.persistence.EntityManager; import jakarta.persistence.NoResultException; import jakarta.persistence.PersistenceContext; @@ -115,8 +114,7 @@ public void importXML(String xmlToParse, String foreignFormat, DatasetVersion da Gson gson = new Gson(); String json = gson.toJson(datasetDTO.getDatasetVersion()); logger.fine(json); - JsonReader jsonReader = Json.createReader(new StringReader(json)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObject(json); DatasetVersion dv = new JsonParser(datasetFieldSvc, blockService, settingsService, licenseService, datasetTypeService).parseDatasetVersion(obj, datasetVersion); } catch (XMLStreamException ex) { //Logger.getLogger("global").log(Level.SEVERE, null, ex); diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GitHubOAuth2AP.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GitHubOAuth2AP.java index 457a91bc932..380c9a57235 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GitHubOAuth2AP.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GitHubOAuth2AP.java @@ -7,11 +7,10 @@ import edu.harvard.iq.dataverse.authorization.providers.shib.ShibUserNameFields; import edu.harvard.iq.dataverse.authorization.providers.shib.ShibUtil; import edu.harvard.iq.dataverse.util.BundleUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import java.io.StringReader; import java.util.Collections; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; /** * IDP adaptor for GitHub.com @@ -36,11 +35,8 @@ public DefaultApi20 getApiInstance() { @Override protected ParsedUserResponse parseUserResponse( String responseBody ) { - - try ( StringReader rdr = new StringReader(responseBody); - JsonReader jrdr = Json.createReader(rdr) ) { - JsonObject response = jrdr.readObject(); - // Github has no concept of a family name + JsonObject response = JsonUtil.getJsonObject(responseBody); + // Github has no concept of a family name ShibUserNameFields shibUserNameFields = ShibUtil.findBestFirstAndLastName(null, null, response.getString("name","")); AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo( shibUserNameFields.getFirstName(), @@ -57,7 +53,5 @@ protected ParsedUserResponse parseUserResponse( String responseBody ) { username, displayInfo.getEmailAddress().length()>0 ? Collections.singletonList(displayInfo.getEmailAddress()) : Collections.emptyList() ); - } - } } diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GoogleOAuth2AP.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GoogleOAuth2AP.java index a0889a5bfd3..99e03065ee5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GoogleOAuth2AP.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/GoogleOAuth2AP.java @@ -5,12 +5,10 @@ import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo; import edu.harvard.iq.dataverse.authorization.providers.oauth2.AbstractOAuth2AuthenticationProvider; import edu.harvard.iq.dataverse.util.BundleUtil; -import java.io.StringReader; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import java.util.Arrays; import java.util.UUID; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; /** * @@ -36,11 +34,9 @@ public DefaultApi20 getApiInstance() { @Override protected ParsedUserResponse parseUserResponse(String responseBody) { - try ( StringReader rdr = new StringReader(responseBody); - JsonReader jrdr = Json.createReader(rdr) ) { - JsonObject response = jrdr.readObject(); - - AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo( + JsonObject response = JsonUtil.getJsonObject(responseBody); + + AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo( response.getString("given_name",""), response.getString("family_name",""), response.getString("email",""), @@ -63,6 +59,5 @@ protected ParsedUserResponse parseUserResponse(String responseBody) { } } return new ParsedUserResponse(displayInfo, persistentUserId, username); - } } } diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/MicrosoftOAuth2AP.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/MicrosoftOAuth2AP.java index bd3caccc220..ab70c84317d 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/MicrosoftOAuth2AP.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/MicrosoftOAuth2AP.java @@ -7,10 +7,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.logging.Logger; -import java.io.StringReader; -import jakarta.json.Json; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import edu.harvard.iq.dataverse.authorization.AuthenticatedUserDisplayInfo; /** @@ -37,10 +35,8 @@ public DefaultApi20 getApiInstance(){ @Override protected ParsedUserResponse parseUserResponse(final String responseBody) { - try ( StringReader rdr = new StringReader(responseBody); - JsonReader jrdr = Json.createReader(rdr) ) { - JsonObject response = jrdr.readObject(); - AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo( + JsonObject response = JsonUtil.getJsonObject(responseBody); + AuthenticatedUserDisplayInfo displayInfo = new AuthenticatedUserDisplayInfo( response.getString("givenName", ""), response.getString("surname", ""), response.getString("userPrincipalName", ""), @@ -50,7 +46,6 @@ protected ParsedUserResponse parseUserResponse(final String responseBody) { return new ParsedUserResponse(displayInfo, persistentUserId, username, (displayInfo.getEmailAddress().length() > 0 ? Collections.singletonList(displayInfo.getEmailAddress()) : Collections.emptyList() ) ); - } } public boolean isDisplayIdentifier() diff --git a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/OrcidOAuth2AP.java b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/OrcidOAuth2AP.java index f32ff2b18e5..5fe8b55cf64 100644 --- a/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/OrcidOAuth2AP.java +++ b/src/main/java/edu/harvard/iq/dataverse/authorization/providers/oauth2/impl/OrcidOAuth2AP.java @@ -12,10 +12,9 @@ import edu.harvard.iq.dataverse.authorization.providers.oauth2.OAuth2Exception; import edu.harvard.iq.dataverse.authorization.providers.oauth2.OAuth2TokenData; import edu.harvard.iq.dataverse.authorization.providers.oauth2.OAuth2UserRecord; -import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import edu.harvard.iq.dataverse.util.BundleUtil; import edu.harvard.iq.dataverse.util.xml.XmlUtil; - +import edu.harvard.iq.dataverse.util.json.JsonUtil; import java.io.IOException; import java.io.StringReader; import java.util.*; @@ -26,9 +25,7 @@ import static java.util.stream.Collectors.joining; import java.util.stream.IntStream; import java.util.stream.Stream; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.validation.constraints.NotNull; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -71,11 +68,8 @@ public OrcidOAuth2AP(String clientId, String clientSecret, String userEndpoint) @Override public String getUserEndpoint( OAuth2AccessToken token ) { - try ( StringReader sRdr = new StringReader(token.getRawResponse()); - JsonReader jRdr = Json.createReader(sRdr) ) { - String orcid = jRdr.readObject().getString("orcid"); - return baseUserEndpoint.replace("{ORCID}", orcid); - } + String orcid = JsonUtil.getJsonObject(token.getRawResponse()).getString("orcid"); + return baseUserEndpoint.replace("{ORCID}", orcid); } @Override @@ -251,8 +245,8 @@ public final static String getLogo() { } protected String extractOrcidNumber( String rawResponse ) throws OAuth2Exception { - try ( JsonReader rdr = Json.createReader( new StringReader(rawResponse)) ) { - JsonObject tokenData = rdr.readObject(); + try { + JsonObject tokenData = JsonUtil.getJsonObject(rawResponse); return tokenData.getString("orcid"); } catch ( Exception e ) { throw new OAuth2Exception(0, rawResponse, "Cannot find ORCiD id in access token response."); diff --git a/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java b/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java index d2ed834f9ef..bec6f97a16e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtil.java @@ -3,16 +3,13 @@ import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.gdcc.spi.export.ExportDataProvider; import io.gdcc.spi.export.ExportException; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonNumber; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonReader; import jakarta.json.JsonValue; import java.io.OutputStream; -import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -82,10 +79,8 @@ public static void exportDataset( } } """; - try (JsonReader jsonReader = Json.createReader(new StringReader(contextString))) { - JsonObject contextObject = jsonReader.readObject(); - job.add("@context", contextObject.getJsonObject("@context")); - } + JsonObject contextObject = JsonUtil.getJsonObject(contextString); + job.add("@context", contextObject.getJsonObject("@context")); job.add("@type", "sc:Dataset"); job.add("conformsTo", "http://mlcommons.org/croissant/1.1"); diff --git a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java index f204dd1f156..f4dd2a2572f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/globus/GlobusServiceBean.java @@ -13,7 +13,6 @@ import jakarta.ejb.TransactionAttributeType; import jakarta.inject.Inject; import jakarta.inject.Named; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObject; @@ -69,18 +68,14 @@ import edu.harvard.iq.dataverse.settings.JvmSettings; import edu.harvard.iq.dataverse.settings.SettingsServiceBean; import edu.harvard.iq.dataverse.util.FileUtil; -import edu.harvard.iq.dataverse.util.StringUtil; import edu.harvard.iq.dataverse.util.SystemConfig; import edu.harvard.iq.dataverse.util.URLTokenUtil; import edu.harvard.iq.dataverse.util.UrlSignerUtil; import edu.harvard.iq.dataverse.util.json.JsonUtil; -import jakarta.json.JsonNumber; -import jakarta.json.JsonReader; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.core.Response; -import org.apache.http.util.EntityUtils; @Stateless @Named("GlobusServiceBean") @@ -1145,10 +1140,10 @@ private void processUploadedFiles(JsonArray filesJsonArray, Dataset dataset, Aut if (newfileJsonObject != null) { logger.fine("List Size: " + newfileJsonObject.size()); // if (!newfileJsonObject.get(0).getString("hash").equalsIgnoreCase("null")) { - JsonPatch patch = Json.createPatchBuilder() + JsonPatch patch = JsonUtil.createPatchBuilder() .add("/md5Hash", newfileJsonObject.get(0).getString("hash")).build(); fileJsonObject = patch.apply(fileJsonObject); - patch = Json.createPatchBuilder() + patch = JsonUtil.createPatchBuilder() .add("/mimeType", newfileJsonObject.get(0).getString("mime")).build(); fileJsonObject = patch.apply(fileJsonObject); // If we already know the size of this file on the Globus end, @@ -1157,7 +1152,7 @@ private void processUploadedFiles(JsonArray filesJsonArray, Dataset dataset, Aut if (fileSizeMap != null && fileSizeMap.get(fileId) != null) { Long uploadedFileSize = fileSizeMap.get(fileId); myLogger.info("Found size for file " + fileId + ": " + uploadedFileSize + " bytes"); - patch = Json.createPatchBuilder() + patch = JsonUtil.createPatchBuilder() .add("/fileSize", JsonUtil.createValue(uploadedFileSize)).build(); fileJsonObject = patch.apply(fileJsonObject); } else { diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java index 37fd380c7b1..13d927c95f2 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/PidUtil.java @@ -18,7 +18,8 @@ import java.util.logging.Logger; import edu.harvard.iq.dataverse.util.json.JsonUtil; -import jakarta.json.Json; +import org.apache.commons.lang3.StringUtils; + import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.ws.rs.BadRequestException; @@ -86,7 +87,7 @@ public static JsonObjectBuilder queryDoi(GlobalId globalId, String baseUrl, Stri logger.severe("Received " + status + " error from DataCite for DOI: " + globalId); InputStream errorStream = connection.getErrorStream(); if (errorStream != null) { - JsonObject out = Json.createReader(connection.getErrorStream()).readObject(); + JsonObject out = JsonUtil.getJsonObjectFromInputStream(errorStream); logger.severe("DataCite error response: " + out.toString()); } else { logger.severe("No error stream from DataCite"); @@ -95,7 +96,7 @@ public static JsonObjectBuilder queryDoi(GlobalId globalId, String baseUrl, Stri } JsonObject out; try { - out = Json.createReader(connection.getInputStream()).readObject(); + out = JsonUtil.getJsonObjectFromInputStream(connection.getInputStream()); } catch (IOException ex) { return JsonUtil.createObjectBuilder().add("response", ex.getLocalizedMessage()); } @@ -140,6 +141,9 @@ public static void addAllToUnmanagedProviderList(List list) { * @throws IllegalArgumentException if the passed string cannot be parsed. */ public static GlobalId parseAsGlobalID(String identifier) { + if(StringUtils.isBlank(identifier)) { + throw new IllegalArgumentException("Blank identifier"); + } logger.fine("In parseAsGlobalId: " + providerMap.size()); for (PidProvider pidProvider : providerMap.values()) { logger.fine(" Checking " + String.join(",", pidProvider.getProviderInformation())); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java index a3596850b44..c1719850872 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/SystemConfig.java @@ -14,16 +14,14 @@ import jakarta.json.stream.JsonParsingException; import org.passay.CharacterRule; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; import jakarta.inject.Named; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.json.JsonString; import jakarta.json.JsonValue; -import java.io.StringReader; import java.net.InetAddress; import java.net.UnknownHostException; import java.time.Year; @@ -521,8 +519,8 @@ public Map getTabularIngestSizeLimits() { if (limitEntry != null) { // Case A: the setting is using JSON to support multiple formats if (limitEntry.trim().startsWith("{")) { - try (JsonReader reader = Json.createReader(new StringReader(limitEntry))) { - JsonObject limits = reader.readObject(); + try { + JsonObject limits = JsonUtil.getJsonObject(limitEntry); Map limitsMap = new HashMap<>(); // We add the default in case the JSON does not contain the default (which is optional). @@ -618,8 +616,8 @@ public Map getHarvestingClientRequestIntervals() { if (settingString != null) { // Case A: the setting is using JSON to support multiple clients if (settingString.trim().startsWith("{")) { - try (JsonReader reader = Json.createReader(new StringReader(settingString))) { - JsonObject delays = reader.readObject(); + try { + JsonObject delays = JsonUtil.getJsonObject(settingString); Map limitsMap = new HashMap<>(); // We add the default in case the JSON does not contain the default (which is optional). @@ -1257,11 +1255,9 @@ public Map getCurationLabels() { Map labelMap = new HashMap(); String setting = settingsService.getValueForKey(SettingsServiceBean.Key.AllowedCurationLabels, ""); if (!setting.isEmpty()) { - try (JsonReader jsonReader = Json.createReader(new StringReader(setting))){ - + try { Pattern pattern = Pattern.compile("(^[\\w ]+$)"); // alphanumeric, underscore and whitespace allowed - - JsonObject labelSets = jsonReader.readObject(); + JsonObject labelSets = JsonUtil.getJsonObject(setting); for (String key : labelSets.keySet()) { JsonArray labels = (JsonArray) labelSets.getJsonArray(key); String[] labelArray = new String[labels.size()]; diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/InAppNotificationsJsonPrinter.java b/src/main/java/edu/harvard/iq/dataverse/util/json/InAppNotificationsJsonPrinter.java index d1aa2d03c65..4407dbd8b5a 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/InAppNotificationsJsonPrinter.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/InAppNotificationsJsonPrinter.java @@ -5,15 +5,12 @@ import edu.harvard.iq.dataverse.branding.BrandingUtil; import edu.harvard.iq.dataverse.util.SystemConfig; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.ejb.EJB; import jakarta.ejb.Stateless; -import jakarta.json.Json; import jakarta.json.JsonException; -import jakarta.json.JsonReader; import jakarta.json.JsonValue; -import java.io.StringReader; - import static edu.harvard.iq.dataverse.dataset.DatasetUtil.getLocaleCurationStatusLabel; import static edu.harvard.iq.dataverse.util.json.JsonPrinter.jsonRoleAssignments; @@ -276,11 +273,9 @@ private void addDatasetMentionedFields(final NullSafeJsonBuilder notificationJso final String additionalInfo = userNotification.getAdditionalInfo(); if (additionalInfo != null && !additionalInfo.isEmpty()) { - try (StringReader stringReader = new StringReader(additionalInfo); - JsonReader jsonReader = Json.createReader(stringReader)) { - + try { // Try to parse the string into a JSON value - JsonValue additionalInfoJson = jsonReader.readValue(); + JsonValue additionalInfoJson = JsonUtil.getJsonValue(additionalInfo); // If successful, add the parsed JSON value. notificationJson.add(KEY_ADDITIONAL_INFO, additionalInfoJson); diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java index a06bb82bc5d..eea1c32672f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java @@ -4,10 +4,16 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; +import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; +import java.nio.charset.Charset; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -20,13 +26,22 @@ import jakarta.json.Json; import jakarta.json.JsonReader; import jakarta.json.JsonException; +import jakarta.json.JsonMergePatch; import jakarta.json.JsonValue; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonNumber; +import jakarta.json.JsonPatch; +import jakarta.json.JsonPatchBuilder; +import jakarta.json.JsonPointer; +import jakarta.json.JsonReaderFactory; import jakarta.json.JsonString; +import jakarta.json.JsonStructure; import jakarta.json.spi.JsonProvider; import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonGeneratorFactory; +import jakarta.json.stream.JsonParser; +import jakarta.json.stream.JsonParserFactory; public class JsonUtil { @@ -303,7 +318,95 @@ public static JsonNumber createValue(BigInteger value){ return provider.createValue(value); } - public static JsonWriterFactory createWriterFactory(Map properties) { + public static JsonWriterFactory createWriterFactory(Map properties) { return provider.createWriterFactory(properties); } + + public static JsonReader createReader(InputStream in) { + return provider.createReader(in); + } + + public static JsonReader createReader(Reader reader) { + return provider.createReader(reader); + } + + public static JsonReader createReader(InputStream in, Charset charset) { + return provider.createReader(new InputStreamReader(in, charset)); + } + + public static JsonWriter createWriter(OutputStream out) { + return provider.createWriter(out); + } + + public static JsonWriter createWriter(Writer writer) { + return provider.createWriter(writer); + } + + public static JsonWriter createWriter(OutputStream out, Charset charset) { + return provider.createWriter(new OutputStreamWriter(out, charset)); + } + + public static JsonReaderFactory createReaderFactory(Map config) { + return provider.createReaderFactory(config); + } + + public static JsonParser createParser(InputStream in) { + return provider.createParser(in); + } + + public static JsonParser createParser(Reader reader) { + return provider.createParser(reader); + } + + public static JsonParser createParser(InputStream in, Charset charset) { + return provider.createParser(new InputStreamReader(in, charset)); + } + + public static JsonParserFactory createParserFactory(Map config) { + return provider.createParserFactory(config); + } + + public static JsonGenerator createGenerator(OutputStream out) { + return provider.createGenerator(out); + } + + public static JsonGenerator createGenerator(Writer writer) { + return provider.createGenerator(writer); + } + + public static JsonGenerator createGenerator(OutputStream out, Charset charset) { + return provider.createGenerator(new OutputStreamWriter(out, charset)); + } + + public static JsonGeneratorFactory createGeneratorFactory(Map config) { + return provider.createGeneratorFactory(config); + } + + public static JsonPatch createPatch(JsonArray array) { + return provider.createPatch(array); + } + + public static JsonPatch createDiff(JsonStructure source, JsonStructure target) { + return provider.createDiff(source, target); + } + + public static JsonMergePatch createMergePatch(JsonValue patch) { + return provider.createMergePatch(patch); + } + + public static JsonMergePatch createMergeDiff(JsonValue source, JsonValue target) { + return provider.createMergeDiff(source, target); + } + + public static JsonPatchBuilder createPatchBuilder() { + return provider.createPatchBuilder(); + } + + public static JsonPatchBuilder createPatchBuilder(JsonArray array) { + return provider.createPatchBuilder(array); + } + + public static JsonPointer createPointer(String path) { + return provider.createPointer(path); + } } diff --git a/src/maven/forbiddenapis.txt b/src/maven/forbiddenapis.txt index a092d1f0a6b..07ba962e810 100644 --- a/src/maven/forbiddenapis.txt +++ b/src/maven/forbiddenapis.txt @@ -15,4 +15,31 @@ jakarta.json.Json#createValue(long) jakarta.json.Json#createValue(java.lang.Number) jakarta.json.Json#createValue(java.lang.String) jakarta.json.Json#createValue(java.math.BigDecimal) -jakarta.json.Json#createValue(java.math.BigInteger) \ No newline at end of file +jakarta.json.Json#createValue(java.math.BigInteger) + +@defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil.getJsonObject(...) or getJsonArray(...) instead +jakarta.json.Json#createReader(java.io.InputStream) +jakarta.json.Json#createReader(java.io.Reader) +jakarta.json.Json#createReader(java.io.InputStream,java.nio.charset.Charset) + +@defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil instead +jakarta.json.Json#createWriter(java.io.OutputStream) +jakarta.json.Json#createWriter(java.io.Writer) +jakarta.json.Json#createWriter(java.io.OutputStream,java.nio.charset.Charset) +jakarta.json.Json#createReaderFactory(java.util.Map) +jakarta.json.Json#createWriterFactory(java.util.Map) +jakarta.json.Json#createParser(java.io.InputStream) +jakarta.json.Json#createParser(java.io.Reader) +jakarta.json.Json#createParser(java.io.InputStream,java.nio.charset.Charset) +jakarta.json.Json#createParserFactory(java.util.Map) +jakarta.json.Json#createGenerator(java.io.OutputStream) +jakarta.json.Json#createGenerator(java.io.Writer) +jakarta.json.Json#createGenerator(java.io.OutputStream,java.nio.charset.Charset) +jakarta.json.Json#createGeneratorFactory(java.util.Map) +jakarta.json.Json#createPatch(jakarta.json.JsonArray) +jakarta.json.Json#createDiff(jakarta.json.JsonStructure,jakarta.json.JsonStructure) +jakarta.json.Json#createMergePatch(jakarta.json.JsonValue) +jakarta.json.Json#createMergeDiff(jakarta.json.JsonValue,jakarta.json.JsonValue) +jakarta.json.Json#createPatchBuilder() +jakarta.json.Json#createPatchBuilder(jakarta.json.JsonArray) +jakarta.json.Json#createPointer(java.lang.String) \ No newline at end of file diff --git a/src/test/java/edu/harvard/iq/dataverse/DatasetFieldServiceBeanFilterResponseTest.java b/src/test/java/edu/harvard/iq/dataverse/DatasetFieldServiceBeanFilterResponseTest.java index 5a20188bbab..1b11725de56 100644 --- a/src/test/java/edu/harvard/iq/dataverse/DatasetFieldServiceBeanFilterResponseTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/DatasetFieldServiceBeanFilterResponseTest.java @@ -1,6 +1,6 @@ package edu.harvard.iq.dataverse; -import jakarta.json.Json; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonArray; import jakarta.json.JsonObject; import jakarta.json.JsonValue; @@ -9,8 +9,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import java.io.FileNotFoundException; -import java.io.FileReader; +import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -279,9 +278,8 @@ private String getValue(String nl, JsonValue values) { return null; // Return null if no match is found } - private JsonObject readObject(String pathname) throws FileNotFoundException { - var reader = new FileReader(pathname); - return Json.createReader(reader).readObject(); + private JsonObject readObject(String pathname) throws IOException { + return JsonUtil.getJsonObjectFromFile(pathname); } private @NotNull JsonObject callFilterResponse(JsonObject cvocEntry, JsonObject readObject, String termURI) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { diff --git a/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java b/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java index 00f79d1bffd..0881173878f 100644 --- a/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/DatasetVersionTest.java @@ -4,7 +4,6 @@ import edu.harvard.iq.dataverse.license.License; import edu.harvard.iq.dataverse.mocks.MocksFactory; import edu.harvard.iq.dataverse.util.json.JsonUtil; -import java.io.StringReader; import java.net.URI; import java.sql.Timestamp; import java.text.ParseException; @@ -14,10 +13,8 @@ import java.util.Date; import java.util.List; import java.util.logging.Logger; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -113,8 +110,7 @@ public void testGetJsonLd() throws ParseException { datasetVersion.setTermsOfUseAndAccess(terms); String jsonLd = datasetVersion.getJsonLd(); logger.fine("jsonLd: " + JsonUtil.prettyPrint(jsonLd)); - JsonReader jsonReader = Json.createReader(new StringReader(jsonLd)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObject(jsonLd); assertEquals("http://schema.org", obj.getString("@context")); assertEquals("Dataset", obj.getString("@type")); assertEquals("https://doi.org/10.5072/FK2/LK0D1H", obj.getString("@id")); @@ -167,8 +163,7 @@ public void testGetJsonLdNonCC0License() throws ParseException { String jsonLd = datasetVersion.getJsonLd(); logger.fine("jsonLd: " + JsonUtil.prettyPrint(jsonLd)); - JsonReader jsonReader = Json.createReader(new StringReader(jsonLd)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObject(jsonLd); assertEquals("http://schema.org", obj.getString("@context")); assertEquals("Dataset", obj.getString("@type")); assertEquals("https://doi.org/10.5072/FK2/LK0D1H", obj.getString("@id")); @@ -207,8 +202,7 @@ public void testGetJsonLdDraft() throws ParseException { assertEquals("", datasetVersion.getPublicationDateAsString()); String jsonLd = datasetVersion.getJsonLd(); logger.fine("jsonLd: " + JsonUtil.prettyPrint(jsonLd)); - JsonReader jsonReader = Json.createReader(new StringReader(jsonLd)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObject(jsonLd); assertEquals("http://schema.org", obj.getString("@context")); assertEquals("DRAFT", obj.getString("version")); } diff --git a/src/test/java/edu/harvard/iq/dataverse/api/AbstractApiBeanTest.java b/src/test/java/edu/harvard/iq/dataverse/api/AbstractApiBeanTest.java index 47a4742a400..0fbfa56675f 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/AbstractApiBeanTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/AbstractApiBeanTest.java @@ -1,6 +1,5 @@ package edu.harvard.iq.dataverse.api; -import java.io.StringReader; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; @@ -13,9 +12,7 @@ import edu.harvard.iq.dataverse.util.testing.JvmSetting; import edu.harvard.iq.dataverse.util.testing.LocalFeatureFlags; import edu.harvard.iq.dataverse.util.testing.LocalJvmSettings; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.json.JsonWriter; import jakarta.json.JsonWriterFactory; import jakarta.json.stream.JsonGenerator; @@ -63,11 +60,10 @@ void testFailIfNull_ok() { void testMessagesNoJsonObject() { String message = "myMessage"; Response response = sut.ok(message); - JsonReader jsonReader = Json.createReader(new StringReader((String) response.getEntity().toString())); - JsonObject jsonObject = jsonReader.readObject(); - Map config = new HashMap<>(); + JsonObject jsonObject = JsonUtil.getJsonObject(response.getEntity().toString()); + Map config = new HashMap<>(); config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jwf = Json.createWriterFactory(config); + JsonWriterFactory jwf = JsonUtil.createWriterFactory(config); StringWriter sw = new StringWriter(); try (JsonWriter jsonWriter = jwf.createWriter(sw)) { jsonWriter.writeObject(jsonObject); @@ -86,8 +82,7 @@ void testUnifiedMessageStyle() { Response response = sut.ok(message); // then - JsonReader jsonReader = Json.createReader(new StringReader(response.getEntity().toString())); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObject(response.getEntity().toString()); assertEquals(message, jsonObject.getString(ApiConstants.MESSAGE_FIELD)); } @@ -96,8 +91,7 @@ void testMessageAndDataDefaultStyle() { String message = "myMessage"; Response response = sut.ok(message, JsonUtil.createObjectBuilder().add("test", "value")); - JsonReader jsonReader = Json.createReader(new StringReader(response.getEntity().toString())); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObject(response.getEntity().toString()); assertEquals(message, jsonObject.getString(ApiConstants.MESSAGE_FIELD)); assertEquals("value", jsonObject.getJsonObject(ApiConstants.DATA_FIELD).getString("test")); @@ -109,8 +103,7 @@ void testMessageAndDataLegacyStyle() { String message = "myMessage"; Response response = sut.ok(message, JsonUtil.createObjectBuilder().add("test", "value")); - JsonReader jsonReader = Json.createReader(new StringReader(response.getEntity().toString())); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObject(response.getEntity().toString()); assertEquals(message, jsonObject.getJsonObject(ApiConstants.MESSAGE_FIELD).getString(ApiConstants.MESSAGE_FIELD)); assertEquals("value", jsonObject.getJsonObject(ApiConstants.DATA_FIELD).getString("test")); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/AdminIT.java b/src/test/java/edu/harvard/iq/dataverse/api/AdminIT.java index c993d67f2e2..5d729af1d07 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/AdminIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/AdminIT.java @@ -9,7 +9,6 @@ import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; import io.restassured.response.Response; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; import org.junit.jupiter.api.AfterAll; @@ -92,8 +91,7 @@ void testSettingsRoundTrip() { .body("data.'"+harmlessSetting+"/lang/"+language+"'", equalTo(harmlessL10nValue)); // Store original settings as JsonObject for later restoration - JsonObject originalSettings = Json.createReader(getResponse.body().asInputStream()) - .readObject() + JsonObject originalSettings = JsonUtil.getJsonObjectFromInputStream(getResponse.body().asInputStream()) .getJsonObject("data"); // Step 2: Set our harmless test setting using UtilIT @@ -134,8 +132,7 @@ void testSettingsRoundTrip() { .statusCode(OK.getStatusCode()); // Store original settings as JsonObject for later restoration - JsonObject finalSettings = Json.createReader(getResponse.body().asInputStream()) - .readObject() + JsonObject finalSettings = JsonUtil.getJsonObjectFromInputStream(getResponse.body().asInputStream()) .getJsonObject("data"); // Verify the settings are back to original state (our test setting should be absent) diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApiTest.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApiTest.java index 5f00d34b276..0600a25db11 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApiTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetFieldServiceApiTest.java @@ -6,9 +6,8 @@ import edu.harvard.iq.dataverse.MetadataBlockServiceBean; import edu.harvard.iq.dataverse.actionlogging.ActionLogServiceBean; import edu.harvard.iq.dataverse.util.BundleUtil; -import jakarta.json.Json; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.ws.rs.core.Response; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -17,7 +16,6 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.io.File; -import java.io.StringReader; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; @@ -121,12 +119,11 @@ public void testLoadDatasetFieldsWhitespaceTrimming() { Path resourceDirectory = Paths.get("src/test/resources/tsv/whitespace-test.tsv"); File testfile = new File(resourceDirectory.toFile().getAbsolutePath()); - JsonReader jsonReader; + JsonObject jsonObject; try (Response response = api.loadDatasetFields(testfile)) { assertEquals(200, response.getStatus()); - jsonReader = Json.createReader(new StringReader(response.getEntity().toString())); + jsonObject = JsonUtil.getJsonObject(response.getEntity().toString()); } - JsonObject jsonObject = jsonReader.readObject(); final List metadataNames = jsonObject.getJsonObject("data").getJsonArray("added") .getValuesAs(e -> e.asJsonObject().getString("name")); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java index d6968546694..41ece4f287d 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DatasetsIT.java @@ -38,7 +38,6 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.io.StringReader; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -3413,7 +3412,7 @@ public void testLinkingDatasets() { linkDatasetsResponse.prettyPrint(); linkDatasetsResponse.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets = Json.createReader(new StringReader(linkDatasetsResponse.asString())).readObject(); + JsonObject linkDatasets = JsonUtil.getJsonObject(linkDatasetsResponse.asString()); JsonArray lst = linkDatasets.getJsonObject("data").getJsonArray("linked-dataverses"); List ids = List.of(dataverse2Id, dataverse3Id); List uniqueids = new ArrayList<>(); @@ -3840,9 +3839,7 @@ public void testReCreateDataset() { String body = response.getBody().asString(); response.then().assertThat().statusCode(CREATED.getStatusCode()); - try (StringReader rdr = new StringReader(body)) { - datasetId = Json.createReader(rdr).readObject().getJsonObject("data").getInt("id"); - } + datasetId = JsonUtil.getJsonObject(body).getJsonObject("data").getInt("id"); // Get the jsonLD metadata for what we recreated response = UtilIT.getDatasetJsonLDMetadata(datasetId, apiToken); response.then().assertThat().statusCode(OK.getStatusCode()); @@ -3947,7 +3944,7 @@ public void testCurationStatusAPIs() { Response getStatusAfterReset = UtilIT.getDatasetCurationStatus(datasetId, apiToken, false); getStatusAfterReset.then().assertThat().statusCode(OK.getStatusCode()); - JsonObject statusAfterReset = Json.createReader(new StringReader(getStatusAfterReset.body().asString())).readObject(); + JsonObject statusAfterReset = JsonUtil.getJsonObject(getStatusAfterReset.body().asString()); assertFalse(statusAfterReset.containsKey("label")); // Attempt to set invalid status @@ -3961,7 +3958,7 @@ public void testCurationStatusAPIs() { // Verify that the current curation label is now empty after publishing Response getStatusAfterPublish = UtilIT.getDatasetCurationStatus(datasetId, apiToken, false); getStatusAfterPublish.then().assertThat().statusCode(OK.getStatusCode()); - JsonObject statusAfterPublish = Json.createReader(new StringReader(getStatusAfterPublish.body().asString())).readObject(); + JsonObject statusAfterPublish = JsonUtil.getJsonObject(getStatusAfterPublish.body().asString()); JsonObject dataObject = statusAfterPublish.getJsonObject("data"); assertFalse(dataObject.containsKey("label"), "Curation label should be empty after publishing"); @@ -3978,7 +3975,7 @@ public void testCurationStatusAPIs() { // Verify the label was set Response getStatusAfterSet = UtilIT.getDatasetCurationStatus(datasetId, apiToken, false); getStatusAfterSet.then().assertThat().statusCode(OK.getStatusCode()); - JsonObject statusAfterSet = Json.createReader(new StringReader(getStatusAfterSet.body().asString())).readObject(); + JsonObject statusAfterSet = JsonUtil.getJsonObject(getStatusAfterSet.body().asString()); JsonObject dataInSecondDraft = statusAfterSet.getJsonObject("data"); assertEquals("State 2", dataInSecondDraft.getString("label"), "Curation label should be set to State 2"); @@ -3989,7 +3986,7 @@ public void testCurationStatusAPIs() { // Verify that the current curation label is now empty after updatecurrent Response getStatusAfterUpdateCurrent = UtilIT.getDatasetCurationStatus(datasetId, apiToken, false); getStatusAfterUpdateCurrent.then().assertThat().statusCode(OK.getStatusCode()); - JsonObject statusAfterUpdateCurrent = Json.createReader(new StringReader(getStatusAfterUpdateCurrent.body().asString())).readObject(); + JsonObject statusAfterUpdateCurrent = JsonUtil.getJsonObject(getStatusAfterUpdateCurrent.body().asString()); JsonObject dataAfterUpdateCurrent = statusAfterUpdateCurrent.getJsonObject("data"); assertFalse(dataAfterUpdateCurrent.containsKey("label"), "Curation label should be empty after updatecurrent"); @@ -3998,7 +3995,7 @@ public void testCurationStatusAPIs() { getHistoryAfterUpdateCurrent.then().assertThat().statusCode(OK.getStatusCode()); // Extract the data array from the response - JsonObject responseObj = Json.createReader(new StringReader(getHistoryAfterUpdateCurrent.body().asString())).readObject(); + JsonObject responseObj = JsonUtil.getJsonObject(getHistoryAfterUpdateCurrent.body().asString()); JsonArray historyAfterUpdateCurrent = responseObj.getJsonArray("data"); // Verify history contains the State 2 label @@ -4024,15 +4021,11 @@ public void testCurationStatusAPIs() { } private JsonArray getDataAsJsonArray(String body) { - try (StringReader rdr = new StringReader(body)) { - return Json.createReader(rdr).readObject().getJsonArray("data"); - } + return JsonUtil.getJsonObject(body).getJsonArray("data"); } private JsonObject getDataAsJsonObject(String body) { - try (StringReader rdr = new StringReader(body)) { - return Json.createReader(rdr).readObject().getJsonObject("data"); - } + return JsonUtil.getJsonObject(body).getJsonObject("data"); } private String getData(String body) { return getDataAsJsonObject(body).toString(); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java index 7cc05c48b2a..f450256142e 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java @@ -17,7 +17,6 @@ import edu.harvard.iq.dataverse.util.BundleUtil; import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.nio.file.Paths; import java.text.MessageFormat; @@ -27,7 +26,6 @@ import java.util.Map; import java.util.logging.Logger; -import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.ws.rs.core.Response.Status; @@ -157,13 +155,11 @@ public void testDataverseCategory() { } @Test - public void testMinimalDataverse() throws FileNotFoundException { + public void testMinimalDataverse() throws IOException { Response createUser = UtilIT.createRandomUser(); createUser.prettyPrint(); String apiToken = UtilIT.getApiTokenFromResponse(createUser); - JsonObject dvJson; - FileReader reader = new FileReader("doc/sphinx-guides/source/_static/api/dataverse-minimal.json"); - dvJson = Json.createReader(reader).readObject(); + JsonObject dvJson = JsonUtil.getJsonObjectFromFile("doc/sphinx-guides/source/_static/api/dataverse-minimal.json"); Response create = UtilIT.createDataverse(dvJson, apiToken); create.prettyPrint(); create.then().assertThat() diff --git a/src/test/java/edu/harvard/iq/dataverse/api/ExternalToolsIT.java b/src/test/java/edu/harvard/iq/dataverse/api/ExternalToolsIT.java index 31e2f9c441d..f02abc90df5 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/ExternalToolsIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/ExternalToolsIT.java @@ -6,16 +6,13 @@ import io.restassured.response.Response; import java.io.File; import java.io.IOException; -import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Base64; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonReader; import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; import static jakarta.ws.rs.core.Response.Status.CREATED; import static jakarta.ws.rs.core.Response.Status.FORBIDDEN; @@ -484,8 +481,7 @@ public void deleteTools() { getTools.then().assertThat() .statusCode(OK.getStatusCode()); String body = getTools.getBody().asString(); - JsonReader bodyObject = Json.createReader(new StringReader(body)); - JsonArray tools = bodyObject.readObject().getJsonArray("data"); + JsonArray tools = JsonUtil.getJsonObject(body).getJsonArray("data"); /* for (int i = 0; i < tools.size(); i++) { JsonObject tool = tools.getJsonObject(i); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/JsonLDExportIT.java b/src/test/java/edu/harvard/iq/dataverse/api/JsonLDExportIT.java index e541abac0a2..4cf036eaee4 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/JsonLDExportIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/JsonLDExportIT.java @@ -1,13 +1,11 @@ package edu.harvard.iq.dataverse.api; -import static io.restassured.RestAssured.given; import static org.hamcrest.CoreMatchers.*; import static org.junit.jupiter.api.Assertions.*; import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.restassured.RestAssured; import io.restassured.response.Response; -import jakarta.json.Json; import jakarta.json.JsonObjectBuilder; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -109,11 +107,7 @@ public void testJsonLDExportWithIncompleteHtmlTagsInFileDescription() { // Verify valid JSON assertDoesNotThrow( - () -> { - jakarta.json.Json.createReader( - new java.io.StringReader(responseBody) - ).readObject(); - }, + () -> JsonUtil.getJsonObject(responseBody), "JSON-LD export should produce valid JSON" ); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/LinkIT.java b/src/test/java/edu/harvard/iq/dataverse/api/LinkIT.java index a8658efa076..d1cc26eec17 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/LinkIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/LinkIT.java @@ -1,20 +1,16 @@ package edu.harvard.iq.dataverse.api; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; import io.restassured.response.Response; -import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; import java.util.logging.Logger; import static jakarta.ws.rs.core.Response.Status.*; -import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.jupiter.api.Assertions.*; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; import org.junit.jupiter.api.BeforeAll; @@ -311,7 +307,7 @@ public void testListLinks() { linkDatasetsResponse.prettyPrint(); linkDatasetsResponse.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets = Json.createReader(new StringReader(linkDatasetsResponse.asString())).readObject(); + JsonObject linkDatasets = JsonUtil.getJsonObject(linkDatasetsResponse.asString()); JsonArray linksList = linkDatasets.getJsonObject("data").getJsonArray("linked-dataverses"); assertEquals(0, linksList.size()); @@ -320,7 +316,7 @@ public void testListLinks() { linkDatasetsResponse2.prettyPrint(); linkDatasetsResponse2.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets2 = Json.createReader(new StringReader(linkDatasetsResponse2.asString())).readObject(); + JsonObject linkDatasets2 = JsonUtil.getJsonObject(linkDatasetsResponse2.asString()); JsonArray linksList2 = linkDatasets2.getJsonObject("data").getJsonArray("linked-dataverses"); assertEquals(1, linksList2.size()); assertEquals(dataverse2Id, linksList2.getJsonObject(0).getInt("id")); @@ -333,7 +329,7 @@ public void testListLinks() { linkDatasetsResponse3.prettyPrint(); linkDatasetsResponse3.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets3 = Json.createReader(new StringReader(linkDatasetsResponse3.asString())).readObject(); + JsonObject linkDatasets3 = JsonUtil.getJsonObject(linkDatasetsResponse3.asString()); JsonArray linksList3 = linkDatasets3.getJsonObject("data").getJsonArray("linked-dataverses"); assertEquals(1, linksList3.size()); assertEquals(dataverse2Id, linksList3.getJsonObject(0).getInt("id")); @@ -370,7 +366,7 @@ public void testListLinks() { linkDatasetsResponse5.prettyPrint(); linkDatasetsResponse5.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets5 = Json.createReader(new StringReader(linkDatasetsResponse5.asString())).readObject(); + JsonObject linkDatasets5 = JsonUtil.getJsonObject(linkDatasetsResponse5.asString()); JsonArray linksList5 = linkDatasets5.getJsonObject("data").getJsonArray("linked-dataverses"); assertEquals(0, linksList5.size()); @@ -391,7 +387,7 @@ public void testListLinks() { linkDatasetsResponse7.prettyPrint(); linkDatasetsResponse7.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linkDatasets7 = Json.createReader(new StringReader(linkDatasetsResponse7.asString())).readObject(); + JsonObject linkDatasets7 = JsonUtil.getJsonObject(linkDatasetsResponse7.asString()); JsonArray linksList7 = linkDatasets7.getJsonObject("data").getJsonArray("linked-dataverses"); assertEquals(0, linksList7.size()); diff --git a/src/test/java/edu/harvard/iq/dataverse/api/MoveIT.java b/src/test/java/edu/harvard/iq/dataverse/api/MoveIT.java index e3ea08c9f0d..592727b13af 100644 --- a/src/test/java/edu/harvard/iq/dataverse/api/MoveIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/api/MoveIT.java @@ -2,16 +2,15 @@ import edu.harvard.iq.dataverse.settings.SettingsServiceBean; import edu.harvard.iq.dataverse.util.BundleUtil; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.restassured.RestAssured; import io.restassured.path.json.JsonPath; import static io.restassured.path.json.JsonPath.with; import io.restassured.response.Response; import edu.harvard.iq.dataverse.authorization.DataverseRole; -import java.io.StringReader; import java.util.List; import java.util.Map; import java.util.logging.Logger; -import jakarta.json.Json; import jakarta.json.JsonObject; import static jakarta.ws.rs.core.Response.Status.BAD_REQUEST; import static jakarta.ws.rs.core.Response.Status.CREATED; @@ -364,7 +363,7 @@ public void testMoveLinkedDataset() { .statusCode(FORBIDDEN.getStatusCode()) .body("message", equalTo("Use the query parameter forceMove=true to complete the move. This dataset is linked to the new host dataverse or one of its parents. This move would remove the link to this dataset. ")); - JsonObject linksBeforeData = Json.createReader(new StringReader(getLinksBefore.asString())).readObject(); + JsonObject linksBeforeData = JsonUtil.getJsonObject(getLinksBefore.asString()); assertEquals(datasetId, linksBeforeData.getJsonObject("data").getInt("id")); assertEquals(dataverse2Id, linksBeforeData.getJsonObject("data").getJsonArray("linked-dataverses").get(0).asJsonObject().getInt("id")); @@ -393,7 +392,7 @@ public void testMoveLinkedDataset() { getLinksAfter.then().assertThat() .statusCode(OK.getStatusCode()); - JsonObject linksAfterData = Json.createReader(new StringReader(getLinksAfter.asString())).readObject(); + JsonObject linksAfterData = JsonUtil.getJsonObject(getLinksAfter.asString()); assertEquals("OK", linksAfterData.getString("status")); assertEquals(0, linksAfterData.getJsonObject("data").getJsonArray("linked-dataverses").size()); } diff --git a/src/test/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleServiceBeanIT.java b/src/test/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleServiceBeanIT.java index 9c3242081b3..30719e006b9 100644 --- a/src/test/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleServiceBeanIT.java +++ b/src/test/java/edu/harvard/iq/dataverse/datacapturemodule/DataCaptureModuleServiceBeanIT.java @@ -7,7 +7,6 @@ import edu.harvard.iq.dataverse.Dataset; import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; import static edu.harvard.iq.dataverse.mocks.MocksFactory.makeAuthenticatedUser; -import java.io.StringReader; import java.util.Calendar; import java.util.TimeZone; import java.util.logging.Logger; @@ -19,9 +18,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import jakarta.json.JsonObject; import static java.lang.Thread.sleep; -import jakarta.json.Json; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonReader; /** * These tests are not expected to pass unless you have a Data Capture Module @@ -54,8 +51,7 @@ public void testUploadRequestAndScriptRequest() throws InterruptedException, Dat System.out.println("out: " + uploadRequestResponse.getResponse()); assertEquals(200, uploadRequestResponse.getHttpStatusCode()); String uploadRequestResponseString = uploadRequestResponse.getResponse(); - JsonReader jsonReader = Json.createReader(new StringReader((String) uploadRequestResponseString)); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObject(uploadRequestResponseString); assertEquals("OK", jsonObject.getString("status")); // If you comment this out, expect to see a 404 when you try to download the script. diff --git a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java index fcbc9611818..bcc80459ccd 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.*; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.gdcc.spi.export.ExportDataProvider; import jakarta.json.Json; import jakarta.json.JsonArray; @@ -54,10 +55,9 @@ public static void setUp() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -66,10 +66,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -78,22 +77,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -118,10 +111,9 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -130,10 +122,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -142,22 +133,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -182,10 +167,9 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -194,10 +178,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -206,22 +189,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -246,10 +223,9 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -258,10 +234,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -270,22 +245,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -310,10 +279,9 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -322,10 +290,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -334,22 +301,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -374,10 +335,9 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -386,10 +346,9 @@ public JsonObject getDatasetJson() { public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -398,22 +357,16 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { return null; } } @@ -552,29 +505,16 @@ private void writeCroissantFile(String actual, String name) throws IOException { } public static String prettyPrint(String jsonObject) { - try { - return prettyPrint(getJsonObject(jsonObject)); - } catch (Exception ex) { - return jsonObject; - } + return JsonUtil.prettyPrint(jsonObject); } public static String prettyPrint(JsonObject jsonObject) { - Map config = new HashMap<>(); - config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(config); - StringWriter stringWriter = new StringWriter(); - try (JsonWriter jsonWriter = jsonWriterFactory.createWriter(stringWriter)) { - jsonWriter.writeObject(jsonObject); - } - return stringWriter.toString(); + return JsonUtil.prettyPrint(jsonObject); } public static JsonObject getJsonObject(String serializedJson) { - try (StringReader rdr = new StringReader(serializedJson)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { - return jsonReader.readObject(); - } - } + return JsonUtil.getJsonObject(serializedJson); } + } + diff --git a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java index 6c6da792d4e..995371c6579 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java @@ -2,27 +2,17 @@ import static org.junit.jupiter.api.Assertions.*; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.gdcc.spi.export.ExportDataProvider; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; -import jakarta.json.JsonWriter; -import jakarta.json.JsonWriterFactory; -import jakarta.json.stream.JsonGenerator; import java.io.ByteArrayOutputStream; -import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.io.OutputStream; -import java.io.StringReader; -import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.HashMap; -import java.util.Map; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; @@ -54,48 +44,28 @@ public static void setUp() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -118,48 +88,28 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -182,48 +132,28 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -246,48 +176,28 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -310,48 +220,28 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -374,48 +264,28 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetJson.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetORE.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetFileDetails.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readArray(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetSchemaDotOrg.json"; - try (JsonReader jsonReader = - Json.createReader(new FileReader(pathToJsonFile))) { - return jsonReader.readObject(); - } catch (FileNotFoundException ex) { - return null; - } + try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } } @Override @@ -577,29 +447,17 @@ private void writeCroissantFile(String actual, String name) throws IOException { } public static String prettyPrint(String jsonObject) { - try { - return prettyPrint(getJsonObject(jsonObject)); - } catch (Exception ex) { - return jsonObject; - } + return JsonUtil.prettyPrint(jsonObject); } public static String prettyPrint(JsonObject jsonObject) { - Map config = new HashMap<>(); - config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(config); - StringWriter stringWriter = new StringWriter(); - try (JsonWriter jsonWriter = jsonWriterFactory.createWriter(stringWriter)) { - jsonWriter.writeObject(jsonObject); - } - return stringWriter.toString(); + return JsonUtil.prettyPrint(jsonObject); } public static JsonObject getJsonObject(String serializedJson) { - try (StringReader rdr = new StringReader(serializedJson)) { - try (JsonReader jsonReader = Json.createReader(rdr)) { - return jsonReader.readObject(); - } - } + return JsonUtil.getJsonObject(serializedJson); } + } + + diff --git a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java index 6824135d204..13db13b1f72 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/DDIExporterTest.java @@ -21,7 +21,6 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; -import java.io.StringReader; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -35,7 +34,6 @@ import java.util.HashSet; import java.util.Set; import java.util.logging.Logger; -import jakarta.json.Json; import jakarta.json.JsonObject; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -77,9 +75,7 @@ private static void tearDownAll() { @Test public void testExportDataset() throws JsonParseException, IOException, ExportException { //given - String datasetDtoJsonString = Files.readString(Path.of("src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-finch1.json"), StandardCharsets.UTF_8); - - JsonObject datasetDtoJson = Json.createReader(new StringReader(datasetDtoJsonString)).readObject(); + JsonObject datasetDtoJson = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-finch1.json"); ExportDataProvider exportDataProviderStub = Mockito.mock(ExportDataProvider.class); Mockito.when(exportDataProviderStub.getDatasetJson()).thenReturn(datasetDtoJson); diff --git a/src/test/java/edu/harvard/iq/dataverse/export/OpenAireExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/OpenAireExporterTest.java index efc18f5a1df..175f3ba065e 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/OpenAireExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/OpenAireExporterTest.java @@ -1,5 +1,6 @@ package edu.harvard.iq.dataverse.export; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import io.restassured.path.xml.XmlPath; import edu.harvard.iq.dataverse.util.xml.XmlPrinter; import edu.harvard.iq.dataverse.util.xml.XmlUtil; @@ -10,14 +11,8 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.File; import java.io.InputStream; -import java.io.StringReader; -import java.nio.file.Files; -import java.nio.file.Paths; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.junit.jupiter.api.Test; @@ -66,10 +61,7 @@ public void testGetDisplayName() { @Test public void testExportDataset() throws Exception { System.out.println("exportDataset"); - File datasetVersionJson = new File("src/test/java/edu/harvard/iq/dataverse/export/dataset-spruce1.json"); - String datasetVersionAsJson = new String(Files.readAllBytes(Paths.get(datasetVersionJson.getAbsolutePath()))); - JsonReader jsonReader = Json.createReader(new StringReader(datasetVersionAsJson)); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/export/dataset-spruce1.json"); ExportDataProvider exportDataProviderStub = Mockito.mock(ExportDataProvider.class); Mockito.when(exportDataProviderStub.getDatasetJson()).thenReturn(jsonObject); @@ -91,10 +83,7 @@ public void testExportDataset() throws Exception { @Test public void testValidateExportDataset() throws Exception { System.out.println("validateExportDataset"); - File datasetVersionJson = new File("src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt"); - String datasetVersionAsJson = new String(Files.readAllBytes(Paths.get(datasetVersionJson.getAbsolutePath()))); - JsonReader jsonReader = Json.createReader(new StringReader(datasetVersionAsJson)); - JsonObject jsonObject = jsonReader.readObject(); + JsonObject jsonObject = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/export/dataset-all-defaults.txt"); ExportDataProvider exportDataProviderStub = Mockito.mock(ExportDataProvider.class); Mockito.when(exportDataProviderStub.getDatasetJson()).thenReturn(jsonObject); diff --git a/src/test/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtilTest.java index 414cef784d7..0ec06d7d507 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/croissant/CroissantExportUtilTest.java @@ -4,22 +4,15 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.IOException; -import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; -import java.util.HashMap; -import java.util.Map; import org.junit.jupiter.api.Test; import edu.harvard.iq.dataverse.util.json.JsonUtil; -import jakarta.json.Json; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonWriter; -import jakarta.json.JsonWriterFactory; -import jakarta.json.stream.JsonGenerator; public class CroissantExportUtilTest { @@ -29,20 +22,9 @@ void testGetReviews() throws IOException { JsonObject apiResponseJson = JsonUtil.getJsonObject(content); JsonObjectBuilder job = JsonUtil.createObjectBuilder(apiResponseJson.getJsonObject("data")); JsonObject result = CroissantExportUtil.getReviews(job).build(); - System.out.println(prettyPrint(result)); + System.out.println(JsonUtil.prettyPrint(result)); assertTrue(result.getJsonArray("reviews").size() == 1); assertEquals("CriticReview", result.getJsonArray("reviews").get(0).asJsonObject().getString("@type")); } - public static String prettyPrint(JsonObject jsonObject) { - Map config = new HashMap<>(); - config.put(JsonGenerator.PRETTY_PRINTING, true); - JsonWriterFactory jsonWriterFactory = Json.createWriterFactory(config); - StringWriter stringWriter = new StringWriter(); - try (JsonWriter jsonWriter = jsonWriterFactory.createWriter(stringWriter)) { - jsonWriter.writeObject(jsonObject); - } - return stringWriter.toString(); - } - } diff --git a/src/test/java/edu/harvard/iq/dataverse/export/dublincore/DublinCoreExportUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/export/dublincore/DublinCoreExportUtilTest.java index 4032f4649a4..09e3ef8d6ec 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/dublincore/DublinCoreExportUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/dublincore/DublinCoreExportUtilTest.java @@ -5,17 +5,15 @@ */ package edu.harvard.iq.dataverse.export.dublincore; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import edu.harvard.iq.dataverse.util.xml.XmlPrinter; import java.io.ByteArrayOutputStream; import java.io.OutputStream; -import java.io.StringReader; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.logging.Logger; -import jakarta.json.Json; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import org.junit.jupiter.api.Test; import org.xmlunit.assertj3.XmlAssert; @@ -34,10 +32,7 @@ public class DublinCoreExportUtilTest { @Test public void testDatasetJson2dublincore() throws Exception { // given - Path datasetVersionJson = Path.of("src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-finch1.json"); - String datasetVersionAsJson = Files.readString(datasetVersionJson, StandardCharsets.UTF_8); - JsonReader jsonReader = Json.createReader(new StringReader(datasetVersionAsJson)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-finch1.json"); Path dubCoreFile = Path.of("src/test/java/edu/harvard/iq/dataverse/export/ddi/dataset-finchDC.xml"); String datasetAsDdi = XmlPrinter.prettyPrintXml(Files.readString(dubCoreFile, StandardCharsets.UTF_8)); diff --git a/src/test/java/edu/harvard/iq/dataverse/feedback/FeedbackUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/feedback/FeedbackUtilTest.java index 072be13dcec..2c4dc77cad7 100644 --- a/src/test/java/edu/harvard/iq/dataverse/feedback/FeedbackUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/feedback/FeedbackUtilTest.java @@ -20,19 +20,14 @@ import edu.harvard.iq.dataverse.settings.SettingsServiceBean; import edu.harvard.iq.dataverse.util.json.JsonParseException; import edu.harvard.iq.dataverse.util.json.JsonParser; -import java.io.File; import java.io.IOException; -import java.io.StringReader; -import java.nio.file.Files; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; -import jakarta.json.Json; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonObject; -import jakarta.json.JsonReader; import jakarta.mail.internet.AddressException; import jakarta.mail.internet.InternetAddress; import org.junit.jupiter.api.Test; @@ -140,28 +135,17 @@ public static void setUpClass() throws IOException, JsonParseException, AddressE } compoundSingleType.setChildDatasetFieldTypes(childTypes); - File datasetVersionJson = new File("src/test/resources/json/dataset-finch1.json"); - String datasetVersionAsJson = new String(Files.readAllBytes(Paths.get(datasetVersionJson.getAbsolutePath()))); - - JsonReader jsonReader1 = Json.createReader(new StringReader(datasetVersionAsJson)); - JsonObject json1 = jsonReader1.readObject(); + JsonObject json1 = JsonUtil.getJsonObjectFromFile("src/test/resources/json/dataset-finch1.json"); JsonParser jsonParser = new JsonParser(datasetFieldTypeSvc, null, settingsService, licenseService, datasetTypeService); dsVersion = jsonParser.parseDatasetVersion(json1.getJsonObject("datasetVersion")); - File datasetVersionJson2 = new File("tests/data/datasetContacts1.json"); - String datasetVersionAsJson2 = new String(Files.readAllBytes(Paths.get(datasetVersionJson2.getAbsolutePath()))); - - JsonReader jsonReader12 = Json.createReader(new StringReader(datasetVersionAsJson2)); - JsonObject json12 = jsonReader12.readObject(); + JsonObject json12 = JsonUtil.getJsonObjectFromFile("tests/data/datasetContacts1.json"); JsonParser jsonParser2 = new JsonParser(datasetFieldTypeSvc, null, settingsService, licenseService, datasetTypeService); dsVersion2 = jsonParser2.parseDatasetVersion(json12.getJsonObject("datasetVersion")); - File datasetVersionJsonNoContacts = new File("tests/data/datasetNoContacts.json"); - String datasetVersionAsJsonNoContacts = new String(Files.readAllBytes(Paths.get(datasetVersionJsonNoContacts.getAbsolutePath()))); - JsonReader jsonReaderNoContacts = Json.createReader(new StringReader(datasetVersionAsJsonNoContacts)); - JsonObject jsonNoContacts = jsonReaderNoContacts.readObject(); + JsonObject jsonNoContacts = JsonUtil.getJsonObjectFromFile("tests/data/datasetNoContacts.json"); JsonParser jsonParserNoContacts = new JsonParser(datasetFieldTypeSvc, null, settingsService, licenseService, datasetTypeService); dsVersionNoContacts = jsonParserNoContacts.parseDatasetVersion(jsonNoContacts.getJsonObject("datasetVersion")); diff --git a/src/test/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountUtilTest.java index 56e786714b6..b7bcab56bc2 100644 --- a/src/test/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/makedatacount/MakeDataCountUtilTest.java @@ -1,10 +1,8 @@ package edu.harvard.iq.dataverse.makedatacount; -import java.io.FileNotFoundException; -import java.io.FileReader; import java.io.IOException; import java.util.List; -import jakarta.json.Json; +import edu.harvard.iq.dataverse.util.json.JsonUtil; import jakarta.json.JsonObject; import org.junit.jupiter.api.Test; @@ -15,8 +13,8 @@ public class MakeDataCountUtilTest { @Test public void testParseSushi() { JsonObject report; - try (FileReader reader = new FileReader("src/test/java/edu/harvard/iq/dataverse/makedatacount/sushi_sample_logs.json")) { - report = Json.createReader(reader).readObject(); + try { + report = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/makedatacount/sushi_sample_logs.json"); // List datasetMetrics = parseSushiReport(report); } catch (IOException ex) { System.out.print("IO exception: " + ex.getMessage()); @@ -28,12 +26,10 @@ public void testParseSushi() { @Test public void testParseCitations() { JsonObject report; - try (FileReader reader = new FileReader("src/test/java/edu/harvard/iq/dataverse/makedatacount/citations-for-doi-10.7910-DVN-HQZOOB.json")) { - report = Json.createReader(reader).readObject(); + try { + report = JsonUtil.getJsonObjectFromFile("src/test/java/edu/harvard/iq/dataverse/makedatacount/citations-for-doi-10.7910-DVN-HQZOOB.json"); List datasetExternalCitations = MakeDataCountUtil.parseCitations(report); assertEquals(2, datasetExternalCitations.size()); - } catch (FileNotFoundException ex) { - System.out.print("File not found: " + ex.getMessage()); } catch (IOException ex) { System.out.print("IO exception: " + ex.getMessage()); } diff --git a/src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java b/src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java index aed5301f05a..56af479ed1d 100644 --- a/src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/util/json/JsonParserTest.java @@ -30,18 +30,13 @@ import org.junit.jupiter.api.Test; import org.mockito.Mockito; -import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; -import jakarta.json.JsonReader; import jakarta.json.JsonValue; -import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.StringReader; import java.math.BigDecimal; import java.text.ParseException; import java.util.*; @@ -259,8 +254,7 @@ void testChildValidation() { " }"; String text = compoundString; - JsonReader jsonReader = Json.createReader(new StringReader(text)); - JsonObject obj = jsonReader.readObject(); + JsonObject obj = JsonUtil.getJsonObject(text); assertThrows(JsonParseException.class, () -> sut.parseField(obj)); } @@ -300,10 +294,8 @@ public void testPrimitiveRepeatesFieldRoundTrip() throws JsonParseException { */ @Test public void testParseCompleteDataverse() throws JsonParseException { - - JsonObject dvJson; - try (FileReader reader = new FileReader("doc/sphinx-guides/source/_static/api/dataverse-complete.json")) { - dvJson = Json.createReader(reader).readObject(); + try { + JsonObject dvJson = JsonUtil.getJsonObjectFromFile("doc/sphinx-guides/source/_static/api/dataverse-complete.json"); Dataverse actual = sut.parseDataverse(dvJson); assertEquals("Scientific Research", actual.getName()); assertEquals("science", actual.getAlias()); @@ -333,9 +325,8 @@ public void testParseCompleteDataverse() throws JsonParseException { */ @Test public void parseDataverseDTO() throws JsonParseException { - JsonObject dvJson; - try (FileReader reader = new FileReader("doc/sphinx-guides/source/_static/api/dataverse-complete.json")) { - dvJson = Json.createReader(reader).readObject(); + try { + JsonObject dvJson = JsonUtil.getJsonObjectFromFile("doc/sphinx-guides/source/_static/api/dataverse-complete.json"); DataverseDTO actual = sut.parseDataverseDTO(dvJson); List actualDataverseContacts = actual.getDataverseContacts(); assertEquals("Scientific Research", actual.getName()); @@ -358,8 +349,7 @@ public void testParseThemeDataverse() throws JsonParseException { JsonObject dvJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/dataverse-theme.json")) { - InputStreamReader reader = new InputStreamReader(jsonFile, "UTF-8"); - dvJson = Json.createReader(reader).readObject(); + dvJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); Dataverse actual = sut.parseDataverse(dvJson); assertEquals("testDv", actual.getName()); assertEquals("testAlias", actual.getAlias()); @@ -392,8 +382,7 @@ public void testParseMinimalDataverse() throws JsonParseException { JsonObject dvJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/minimal-dataverse.json")) { - InputStreamReader reader = new InputStreamReader(jsonFile, "UTF-8"); - dvJson = Json.createReader(reader).readObject(); + dvJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); Dataverse actual = sut.parseDataverse(dvJson); assertEquals("testDv", actual.getName()); assertEquals("testAlias", actual.getAlias()); @@ -416,7 +405,7 @@ public void testParseMinimalDataverse() throws JsonParseException { void testParseNoAliasDataverse() throws IOException { JsonObject dvJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/no-alias-dataverse.json")) { - dvJson = Json.createReader(jsonFile).readObject(); + dvJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); assertThrows(JsonParseException.class, () -> sut.parseDataverse(dvJson)); } } @@ -430,7 +419,7 @@ void testParseNoAliasDataverse() throws IOException { void testParseNoNameDataverse() throws IOException { JsonObject dvJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/no-name-dataverse.json")) { - dvJson = Json.createReader(jsonFile).readObject(); + dvJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); assertThrows(JsonParseException.class, () -> sut.parseDataverse(dvJson)); } } @@ -445,7 +434,7 @@ void testParseNoNameDataverse() throws IOException { void testParseNoContactEmailsDataverse() throws IOException { JsonObject dvJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/no-contacts-dataverse.json")) { - dvJson = Json.createReader(jsonFile).readObject(); + dvJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); assertThrows(JsonParseException.class, () -> sut.parseDataverse(dvJson)); } } @@ -503,8 +492,7 @@ public void testDateTimeRoundtrip() throws ParseException { void testParseEmptyDataset() throws JsonParseException { JsonObject dsJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/empty-dataset.json")) { - InputStreamReader reader = new InputStreamReader(jsonFile, "UTF-8"); - dsJson = Json.createReader(reader).readObject(); + dsJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); System.out.println(dsJson != null); assertThrows(NullPointerException.class, () -> sut.parseDataset(dsJson)); } catch (IOException ioe) { @@ -523,8 +511,7 @@ void testParseEmptyDataset() throws JsonParseException { void testParseOvercompleteDatasetVersion() throws IOException { JsonObject dsJson; try (InputStream jsonFile = ClassLoader.getSystemResourceAsStream("json/complete-dataset-version.json")) { - InputStreamReader reader = new InputStreamReader(jsonFile, "UTF-8"); - dsJson = Json.createReader(reader).readObject(); + dsJson = JsonUtil.getJsonObjectFromInputStream(jsonFile); Assumptions.assumeTrue(dsJson != null); assertDoesNotThrow(() -> sut.parseDatasetVersion(dsJson)); } @@ -647,7 +634,7 @@ public void testValidRegexMailDomainGroup() throws JsonParseException { void testMailDomainGroupMissingName() { // given String noname = "{ \"id\": 1, \"alias\": \"test\", \"domains\": [] }"; - JsonObject obj = Json.createReader(new StringReader(noname)).readObject(); + JsonObject obj = JsonUtil.getJsonObject(noname); // when && then assertThrows(JsonParseException.class, () -> new JsonParser().parseMailDomainGroup(obj)); } @@ -656,7 +643,7 @@ void testMailDomainGroupMissingName() { void testMailDomainGroupMissingDomains() { // given String noname = "{ \"name\": \"test\", \"alias\": \"test\" }"; - JsonObject obj = Json.createReader(new StringReader(noname)).readObject(); + JsonObject obj = JsonUtil.getJsonObject(noname); // when && then assertThrows(JsonParseException.class, () -> new JsonParser().parseMailDomainGroup(obj)); } @@ -665,7 +652,7 @@ void testMailDomainGroupMissingDomains() { void testMailDomainGroupNotEnabledRegexDomains() { // given String regexNotEnabled = "{ \"id\": 1, \"alias\": \"test\", \"domains\": [\"^foobar\\\\.com\"] }"; - JsonObject obj = Json.createReader(new StringReader(regexNotEnabled)).readObject(); + JsonObject obj = JsonUtil.getJsonObject(regexNotEnabled); // when && then assertThrows(JsonParseException.class, () -> new JsonParser().parseMailDomainGroup(obj)); } @@ -703,7 +690,7 @@ public void testparseFiles() throws JsonParseException { } JsonObject json( String s ) { - return Json.createReader( new StringReader(s) ).readObject(); + return JsonUtil.getJsonObject(s); } public boolean assertFieldsEqual( DatasetField ex, DatasetField act ) { @@ -966,3 +953,4 @@ public void testGuestbookResponse() throws JsonParseException { } } } + From 54de7293bb95c4cefd85fb3da7a0232272c4c3f9 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 11 Aug 2026 13:50:56 -0400 Subject: [PATCH 3/5] remove halucinated method (cherry picked from commit fe171bc892251fe60932e3691ef82c027dd8935a) --- .../java/edu/harvard/iq/dataverse/util/json/JsonUtil.java | 4 ---- src/maven/forbiddenapis.txt | 1 - 2 files changed, 5 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java index eea1c32672f..25ca417fdd3 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java @@ -330,10 +330,6 @@ public static JsonReader createReader(Reader reader) { return provider.createReader(reader); } - public static JsonReader createReader(InputStream in, Charset charset) { - return provider.createReader(new InputStreamReader(in, charset)); - } - public static JsonWriter createWriter(OutputStream out) { return provider.createWriter(out); } diff --git a/src/maven/forbiddenapis.txt b/src/maven/forbiddenapis.txt index 07ba962e810..8fc66d9e2d2 100644 --- a/src/maven/forbiddenapis.txt +++ b/src/maven/forbiddenapis.txt @@ -20,7 +20,6 @@ jakarta.json.Json#createValue(java.math.BigInteger) @defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil.getJsonObject(...) or getJsonArray(...) instead jakarta.json.Json#createReader(java.io.InputStream) jakarta.json.Json#createReader(java.io.Reader) -jakarta.json.Json#createReader(java.io.InputStream,java.nio.charset.Charset) @defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil instead jakarta.json.Json#createWriter(java.io.OutputStream) From e5f79af14233ef42bcc6392bd979a2eb1447e6fb Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 11 Aug 2026 14:48:53 -0400 Subject: [PATCH 4/5] remove more halucinated methods, add one missing (cherry picked from commit a8cc87224b33771be4f91ef8fb7e0e41bf408b0b) --- .../iq/dataverse/util/json/JsonUtil.java | 20 +++++-------------- src/maven/forbiddenapis.txt | 6 ++---- 2 files changed, 7 insertions(+), 19 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java index 25ca417fdd3..89999620239 100644 --- a/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java +++ b/src/main/java/edu/harvard/iq/dataverse/util/json/JsonUtil.java @@ -4,16 +4,13 @@ import java.io.FileReader; import java.io.IOException; import java.io.InputStream; -import java.io.InputStreamReader; import java.io.OutputStream; -import java.io.OutputStreamWriter; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; import java.math.BigDecimal; import java.math.BigInteger; -import java.nio.charset.Charset; import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -37,6 +34,7 @@ import jakarta.json.JsonReaderFactory; import jakarta.json.JsonString; import jakarta.json.JsonStructure; +import jakarta.json.JsonBuilderFactory; import jakarta.json.spi.JsonProvider; import jakarta.json.stream.JsonGenerator; import jakarta.json.stream.JsonGeneratorFactory; @@ -338,10 +336,6 @@ public static JsonWriter createWriter(Writer writer) { return provider.createWriter(writer); } - public static JsonWriter createWriter(OutputStream out, Charset charset) { - return provider.createWriter(new OutputStreamWriter(out, charset)); - } - public static JsonReaderFactory createReaderFactory(Map config) { return provider.createReaderFactory(config); } @@ -354,10 +348,6 @@ public static JsonParser createParser(Reader reader) { return provider.createParser(reader); } - public static JsonParser createParser(InputStream in, Charset charset) { - return provider.createParser(new InputStreamReader(in, charset)); - } - public static JsonParserFactory createParserFactory(Map config) { return provider.createParserFactory(config); } @@ -370,10 +360,6 @@ public static JsonGenerator createGenerator(Writer writer) { return provider.createGenerator(writer); } - public static JsonGenerator createGenerator(OutputStream out, Charset charset) { - return provider.createGenerator(new OutputStreamWriter(out, charset)); - } - public static JsonGeneratorFactory createGeneratorFactory(Map config) { return provider.createGeneratorFactory(config); } @@ -405,4 +391,8 @@ public static JsonPatchBuilder createPatchBuilder(JsonArray array) { public static JsonPointer createPointer(String path) { return provider.createPointer(path); } + + public static JsonBuilderFactory createBuilderFactory(Map config) { + return provider.createBuilderFactory(config); + } } diff --git a/src/maven/forbiddenapis.txt b/src/maven/forbiddenapis.txt index 8fc66d9e2d2..43b2939732b 100644 --- a/src/maven/forbiddenapis.txt +++ b/src/maven/forbiddenapis.txt @@ -24,16 +24,13 @@ jakarta.json.Json#createReader(java.io.Reader) @defaultMessage Use edu.harvard.iq.dataverse.util.json.JsonUtil instead jakarta.json.Json#createWriter(java.io.OutputStream) jakarta.json.Json#createWriter(java.io.Writer) -jakarta.json.Json#createWriter(java.io.OutputStream,java.nio.charset.Charset) jakarta.json.Json#createReaderFactory(java.util.Map) jakarta.json.Json#createWriterFactory(java.util.Map) jakarta.json.Json#createParser(java.io.InputStream) jakarta.json.Json#createParser(java.io.Reader) -jakarta.json.Json#createParser(java.io.InputStream,java.nio.charset.Charset) jakarta.json.Json#createParserFactory(java.util.Map) jakarta.json.Json#createGenerator(java.io.OutputStream) jakarta.json.Json#createGenerator(java.io.Writer) -jakarta.json.Json#createGenerator(java.io.OutputStream,java.nio.charset.Charset) jakarta.json.Json#createGeneratorFactory(java.util.Map) jakarta.json.Json#createPatch(jakarta.json.JsonArray) jakarta.json.Json#createDiff(jakarta.json.JsonStructure,jakarta.json.JsonStructure) @@ -41,4 +38,5 @@ jakarta.json.Json#createMergePatch(jakarta.json.JsonValue) jakarta.json.Json#createMergeDiff(jakarta.json.JsonValue,jakarta.json.JsonValue) jakarta.json.Json#createPatchBuilder() jakarta.json.Json#createPatchBuilder(jakarta.json.JsonArray) -jakarta.json.Json#createPointer(java.lang.String) \ No newline at end of file +jakarta.json.Json#createPointer(java.lang.String) +jakarta.json.Json#createBuilderFactory(java.util.Map) \ No newline at end of file From 167426567399e4eb9858aefcac334b8301556433 Mon Sep 17 00:00:00 2001 From: Jim Myers Date: Tue, 11 Aug 2026 15:51:57 -0400 Subject: [PATCH 5/5] formatting for review dog --- .../export/CroissantExporterSlimTest.java | 42 ++++- .../export/CroissantExporterTest.java | 150 +++++++++++++++--- 2 files changed, 160 insertions(+), 32 deletions(-) diff --git a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java index bcc80459ccd..6769d6caede 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterSlimTest.java @@ -11,6 +11,7 @@ import jakarta.json.JsonWriter; import jakarta.json.JsonWriterFactory; import jakarta.json.stream.JsonGenerator; + import java.io.ByteArrayOutputStream; import java.io.FileNotFoundException; import java.io.FileReader; @@ -24,6 +25,7 @@ import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; @@ -77,7 +79,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -133,7 +139,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -189,7 +199,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -245,7 +259,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -301,7 +319,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -357,7 +379,11 @@ public JsonObject getDatasetORE() { public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override @@ -455,7 +481,9 @@ public void testExportDatasetCars() throws Exception { assertEquals(prettyPrint(expected), prettyPrint(outputStreamCars.toString())); } - /** Same as the cars data but the stata13-auto.dta file is restricted. */ + /** + * Same as the cars data but the stata13-auto.dta file is restricted. + */ @Test public void testExportDatasetRestricted() throws Exception { exporter.exportDataset(dataProviderRestricted, outputStreamRestricted); diff --git a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java index 995371c6579..e8f3f9aeac4 100644 --- a/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/export/CroissantExporterTest.java @@ -6,6 +6,7 @@ import io.gdcc.spi.export.ExportDataProvider; import jakarta.json.JsonArray; import jakarta.json.JsonObject; + import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; @@ -13,6 +14,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; + import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.skyscreamer.jsonassert.JSONAssert; @@ -44,28 +46,44 @@ public static void setUp() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/minimal/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -88,28 +106,44 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/max/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -132,28 +166,44 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/cars/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -176,28 +226,44 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/restricted/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -220,28 +286,44 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/junk/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -264,28 +346,44 @@ public String getDataCiteXml() { public JsonObject getDatasetJson() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetJson.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetORE() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetORE.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override public JsonArray getDatasetFileDetails() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetFileDetails.json"; - try { return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonArray(Files.readString(Paths.get(pathToJsonFile), StandardCharsets.UTF_8)); + } catch (IOException ex) { + return null; + } } @Override public JsonObject getDatasetSchemaDotOrg() { String pathToJsonFile = "src/test/resources/croissant/draft/in/datasetSchemaDotOrg.json"; - try { return JsonUtil.getJsonObjectFromFile(pathToJsonFile); } catch (IOException ex) { return null; } + try { + return JsonUtil.getJsonObjectFromFile(pathToJsonFile); + } catch (IOException ex) { + return null; + } } @Override @@ -397,7 +495,9 @@ public void testExportDatasetCars() throws Exception { assertEquals(prettyPrint(expected), prettyPrint(outputStreamCars.toString())); } - /** Same as the cars data but the stata13-auto.dta file is restricted. */ + /** + * Same as the cars data but the stata13-auto.dta file is restricted. + */ @Test public void testExportDatasetRestricted() throws Exception { exporter.exportDataset(dataProviderRestricted, outputStreamRestricted);