diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java index 66fdf71d3aea..2ff15723b264 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java @@ -1005,7 +1005,7 @@ public ResultList listAfter( if (limitParam > 0) { // forward scrolling, if after == null then first page is being asked Map cursorMap = - parseCursorMap(after == null ? "" : RestUtil.decodeCursor(after)); + parseCursorMap(after == null || after.isEmpty() ? "" : RestUtil.decodeCursor(after)); String afterName = FullyQualifiedName.unquoteName(cursorMap.get("name")); String afterId = cursorMap.get("id"); List jsons = dao.listAfter(filter, limitParam + 1, afterName, afterId); @@ -1019,7 +1019,7 @@ public ResultList listAfter( String beforeCursor; String afterCursor = null; - beforeCursor = after == null ? null : getCursorValue(entities.get(0)); + beforeCursor = after == null || after.isEmpty() ? null : getCursorValue(entities.get(0)); if (entities.size() > limitParam) { // If extra result exists, then next page exists - return after cursor entities.remove(limitParam); diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/WebAnalyticEventRepository.java b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/WebAnalyticEventRepository.java index 2059f597ae67..652efb10c82a 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/WebAnalyticEventRepository.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/WebAnalyticEventRepository.java @@ -169,7 +169,8 @@ private String getBeforeOffset(int offsetInt, int limit) { } private int getOffset(String offset) { - return offset != null ? Integer.parseInt(RestUtil.decodeCursor(offset)) : 0; + String decoded = RestUtil.decodeCursor(offset); + return offset != null && decoded != null ? Integer.parseInt(decoded) : 0; } private Map> getEntityList(List jsons, boolean skipErrors) { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/RestUtil.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/RestUtil.java index e4a4073909b0..88b698183aaa 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/RestUtil.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/RestUtil.java @@ -117,7 +117,9 @@ public static String encodeCursor(String cursor) { } public static String decodeCursor(String cursor) { - return cursor == null ? null : new String(Base64.getUrlDecoder().decode(cursor)); + return cursor == null || cursor.isEmpty() + ? null + : new String(Base64.getUrlDecoder().decode(cursor)); } public static class PutResponse { diff --git a/openmetadata-service/src/main/java/org/openmetadata/service/util/jdbi/JdbiUtils.java b/openmetadata-service/src/main/java/org/openmetadata/service/util/jdbi/JdbiUtils.java index 07eb153012a5..46a6b7e09798 100644 --- a/openmetadata-service/src/main/java/org/openmetadata/service/util/jdbi/JdbiUtils.java +++ b/openmetadata-service/src/main/java/org/openmetadata/service/util/jdbi/JdbiUtils.java @@ -55,7 +55,8 @@ public static Jdbi createAndSetupJDBI(DataSourceFactory dbFactory) { } public static int getOffset(String offset) { - return offset != null ? Integer.parseInt(RestUtil.decodeCursor(offset)) : 0; + String decoded = RestUtil.decodeCursor(offset); + return offset != null && decoded != null ? Integer.parseInt(decoded) : 0; } public static String getAfterOffset(int offsetInt, int limit, int total) {