This is an automated email from the ASF dual-hosted git repository.

snazy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/polaris.git


The following commit(s) were added to refs/heads/main by this push:
     new 6455a4a98 Move `decodeNamespace` to a utility class (#3793)
6455a4a98 is described below

commit 6455a4a98ab152f5d932edf5ccbf3f933065e214
Author: Robert Stupp <[email protected]>
AuthorDate: Thu Feb 19 18:11:33 2026 +0100

    Move `decodeNamespace` to a utility class (#3793)
---
 .../apache/polaris/service/catalog/common/CatalogAdapter.java    | 8 --------
 .../org/apache/polaris/service/catalog/common/CatalogUtils.java  | 9 +++++++++
 .../service/catalog/generic/GenericTableCatalogAdapter.java      | 2 ++
 .../polaris/service/catalog/iceberg/IcebergCatalogAdapter.java   | 5 ++++-
 .../catalog/iceberg/IcebergRestCatalogEventServiceDelegator.java | 2 ++
 .../polaris/service/catalog/policy/PolicyCatalogAdapter.java     | 2 ++
 6 files changed, 19 insertions(+), 9 deletions(-)

diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java
index b518330a6..2a0e103b5 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogAdapter.java
@@ -19,11 +19,7 @@
 package org.apache.polaris.service.catalog.common;
 
 import jakarta.ws.rs.core.SecurityContext;
-import java.net.URLEncoder;
-import java.nio.charset.Charset;
-import org.apache.iceberg.catalog.Namespace;
 import org.apache.iceberg.exceptions.NotAuthorizedException;
-import org.apache.iceberg.rest.RESTUtil;
 import org.apache.polaris.core.auth.PolarisPrincipal;
 
 /**
@@ -31,10 +27,6 @@ import org.apache.polaris.core.auth.PolarisPrincipal;
  * implementations
  */
 public interface CatalogAdapter {
-  default Namespace decodeNamespace(String namespace) {
-    return RESTUtil.decodeNamespace(URLEncoder.encode(namespace, 
Charset.defaultCharset()));
-  }
-
   default PolarisPrincipal validatePrincipal(SecurityContext securityContext) {
     var authenticatedPrincipal = securityContext.getUserPrincipal();
     if (authenticatedPrincipal instanceof PolarisPrincipal polarisPrincipal) {
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogUtils.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogUtils.java
index 999b363fb..ae76e1490 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogUtils.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/common/CatalogUtils.java
@@ -19,11 +19,16 @@
 
 package org.apache.polaris.service.catalog.common;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+import java.net.URLEncoder;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Collectors;
+import org.apache.iceberg.catalog.Namespace;
 import org.apache.iceberg.catalog.TableIdentifier;
 import org.apache.iceberg.exceptions.ForbiddenException;
+import org.apache.iceberg.rest.RESTUtil;
 import org.apache.polaris.core.admin.model.StorageConfigInfo;
 import org.apache.polaris.core.config.FeatureConfiguration;
 import org.apache.polaris.core.config.RealmConfig;
@@ -94,4 +99,8 @@ public class CatalogUtils {
               }
             });
   }
+
+  public static Namespace decodeNamespace(String namespace) {
+    return RESTUtil.decodeNamespace(URLEncoder.encode(namespace, UTF_8));
+  }
 }
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java
index 8df19d925..2abb763b1 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/generic/GenericTableCatalogAdapter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.polaris.service.catalog.generic;
 
+import static 
org.apache.polaris.service.catalog.common.CatalogUtils.decodeNamespace;
+
 import jakarta.enterprise.context.RequestScoped;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.core.Response;
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java
index 24c959c3e..930fac184 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergCatalogAdapter.java
@@ -19,6 +19,7 @@
 package org.apache.polaris.service.catalog.iceberg;
 
 import static 
org.apache.polaris.service.catalog.AccessDelegationMode.VENDED_CREDENTIALS;
+import static 
org.apache.polaris.service.catalog.common.CatalogUtils.decodeNamespace;
 import static 
org.apache.polaris.service.catalog.validation.IcebergPropertiesValidation.validateIcebergProperties;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -58,6 +59,7 @@ import org.apache.polaris.service.catalog.CatalogPrefixParser;
 import org.apache.polaris.service.catalog.api.IcebergRestCatalogApiService;
 import 
org.apache.polaris.service.catalog.api.IcebergRestConfigurationApiService;
 import org.apache.polaris.service.catalog.common.CatalogAdapter;
+import org.apache.polaris.service.catalog.common.CatalogUtils;
 import org.apache.polaris.service.config.ReservedProperties;
 import org.apache.polaris.service.http.IcebergHttpUtil;
 import org.apache.polaris.service.http.IfNoneMatch;
@@ -148,7 +150,8 @@ public class IcebergCatalogAdapter
       String parent,
       RealmContext realmContext,
       SecurityContext securityContext) {
-    Optional<Namespace> namespaceOptional = 
Optional.ofNullable(parent).map(this::decodeNamespace);
+    Optional<Namespace> namespaceOptional =
+        Optional.ofNullable(parent).map(CatalogUtils::decodeNamespace);
     return withCatalog(
         securityContext,
         prefix,
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergRestCatalogEventServiceDelegator.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergRestCatalogEventServiceDelegator.java
index ee3def12a..7f3f67233 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergRestCatalogEventServiceDelegator.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/iceberg/IcebergRestCatalogEventServiceDelegator.java
@@ -19,6 +19,8 @@
 
 package org.apache.polaris.service.catalog.iceberg;
 
+import static 
org.apache.polaris.service.catalog.common.CatalogUtils.decodeNamespace;
+
 import com.google.common.annotations.VisibleForTesting;
 import jakarta.annotation.Priority;
 import jakarta.decorator.Decorator;
diff --git 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java
 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java
index 9068a43aa..e2b4c6c6d 100644
--- 
a/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java
+++ 
b/runtime/service/src/main/java/org/apache/polaris/service/catalog/policy/PolicyCatalogAdapter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.polaris.service.catalog.policy;
 
+import static 
org.apache.polaris.service.catalog.common.CatalogUtils.decodeNamespace;
+
 import jakarta.enterprise.context.RequestScoped;
 import jakarta.inject.Inject;
 import jakarta.ws.rs.core.Response;

Reply via email to