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;