From 9d24e0946bea91110b6f25c809133ee2aafb14bb Mon Sep 17 00:00:00 2001 From: Florian Fritze Date: Thu, 21 Aug 2025 15:33:33 +0200 Subject: [PATCH 1/4] integer detection for array access --- .../edu/harvard/iq/dataverse/DatasetFieldServiceBean.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index dce7a98fd75..49fdafd2f5e 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -764,7 +764,13 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri } } else { - curPath = ((JsonObject) curPath).get(pathParts[index]); + try { + int indexNumber = Integer.parseInt(pathParts[index]); + curPath = ((JsonObject) curPath).get(indexNumber); + } catch (NumberFormatException nfe) { + curPath = ((JsonObject) curPath).get(pathParts[index]); + } + // curPath = ((JsonObject) curPath).get(pathParts[index]); logger.fine("Found next Path object " + curPath.toString()); return processPathSegment(index + 1, pathParts, curPath, termUri); } From 894d3d5b2ea4eba018c55c7c074a2ca527819835 Mon Sep 17 00:00:00 2001 From: Florian Fritze Date: Fri, 22 Aug 2025 07:27:25 +0200 Subject: [PATCH 2/4] first check if it's a number --- .../iq/dataverse/DatasetFieldServiceBean.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index 49fdafd2f5e..35b34c8d3a5 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -43,6 +43,7 @@ import jakarta.persistence.criteria.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.http.HttpResponse; import org.apache.http.HttpResponseInterceptor; import org.apache.http.client.methods.HttpGet; @@ -764,10 +765,14 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri } } else { - try { - int indexNumber = Integer.parseInt(pathParts[index]); - curPath = ((JsonObject) curPath).get(indexNumber); - } catch (NumberFormatException nfe) { + if (NumberUtils.isCreatable(pathParts[index])) { + try { + int indexNumber = Integer.parseInt(pathParts[index]); + curPath = ((JsonObject) curPath).get(indexNumber); + } catch (NumberFormatException nfe) { + logger.fine("Please provide a valid integer number " + pathParts[index]); + } + } else { curPath = ((JsonObject) curPath).get(pathParts[index]); } // curPath = ((JsonObject) curPath).get(pathParts[index]); From 69e5a349f3cd44f28b86ff0e1dac4ba5eb71f803 Mon Sep 17 00:00:00 2001 From: Florian Fritze Date: Fri, 22 Aug 2025 08:03:34 +0200 Subject: [PATCH 3/4] JsonArray fix --- .../java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index 35b34c8d3a5..244e7f959d8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -768,7 +768,7 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri if (NumberUtils.isCreatable(pathParts[index])) { try { int indexNumber = Integer.parseInt(pathParts[index]); - curPath = ((JsonObject) curPath).get(indexNumber); + curPath = ((JsonArray) curPath).get(indexNumber); } catch (NumberFormatException nfe) { logger.fine("Please provide a valid integer number " + pathParts[index]); } From 3cf657f55a31fbc08961ff7822dbe1d4949a9e03 Mon Sep 17 00:00:00 2001 From: Florian Fritze Date: Tue, 7 Oct 2025 14:49:02 +0200 Subject: [PATCH 4/4] @qqmyers additional suggestion --- .../edu/harvard/iq/dataverse/DatasetFieldServiceBean.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java index 793a98e811c..695a8828224 100644 --- a/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java +++ b/src/main/java/edu/harvard/iq/dataverse/DatasetFieldServiceBean.java @@ -794,7 +794,7 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri } } else { - if (NumberUtils.isCreatable(pathParts[index])) { + if ((curPath instanceof JsonArray) && NumberUtils.isCreatable(pathParts[index])) { try { int indexNumber = Integer.parseInt(pathParts[index]); curPath = ((JsonArray) curPath).get(indexNumber); @@ -805,7 +805,7 @@ Object processPathSegment(int index, String[] pathParts, JsonValue curPath, Stri curPath = ((JsonObject) curPath).get(pathParts[index]); } // curPath = ((JsonObject) curPath).get(pathParts[index]); - logger.fine("Found next Path object " + curPath.toString()); + logger.fine("Found next Path object " + ((curPath == null) ? "null" : curPath.toString())); return processPathSegment(index + 1, pathParts, curPath, termUri); } } else {