This is an automated email from the ASF dual-hosted git repository.
joerghoh pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git
The following commit(s) were added to refs/heads/trunk by this push:
new 04caa2c615 OAK-11784 avoid repeated instantiation of the
NamespaceRegistry
04caa2c615 is described below
commit 04caa2c615f736d032421a97077aff7db967f549
Author: Joerg Hoh <[email protected]>
AuthorDate: Sun Jul 6 15:52:35 2025 +0200
OAK-11784 avoid repeated instantiation of the NamespaceRegistry
---
.../jackrabbit/oak/jcr/xml/ImportHandler.java | 41 ++++++++++++++++++++--
1 file changed, 38 insertions(+), 3 deletions(-)
diff --git
a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
index 37a154aee5..d66ac90ac8 100644
--- a/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
+++ b/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/xml/ImportHandler.java
@@ -19,15 +19,17 @@ package org.apache.jackrabbit.oak.jcr.xml;
import java.util.HashMap;
import java.util.Map;
+import javax.jcr.NamespaceException;
+import javax.jcr.NamespaceRegistry;
import javax.jcr.RepositoryException;
-import org.apache.jackrabbit.commons.NamespaceHelper;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants;
import org.apache.jackrabbit.oak.spi.xml.Importer;
+import org.apache.jackrabbit.util.XMLChar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.Attributes;
@@ -61,6 +63,7 @@ public class ImportHandler extends DefaultHandler {
private final SessionContext sessionContext;
private final Importer importer;
private final boolean isWorkspaceImport;
+ private final NamespaceRegistry namespaceRegistry;
protected Locator locator;
private TargetImportHandler targetHandler;
@@ -70,6 +73,7 @@ public class ImportHandler extends DefaultHandler {
int uuidBehavior, boolean isWorkspaceImport) throws
RepositoryException {
this.sessionContext = sessionContext;
this.isWorkspaceImport = isWorkspaceImport;
+ this.namespaceRegistry =
sessionContext.getSession().getWorkspace().getNamespaceRegistry();
SessionDelegate sd = sessionContext.getSessionDelegate();
root = (isWorkspaceImport) ? sd.getContentSession().getLatestRoot() :
sd.getRoot();
@@ -136,8 +140,7 @@ public class ImportHandler extends DefaultHandler {
public void startPrefixMapping(String prefix, String uri)
throws SAXException {
try {
- new NamespaceHelper(sessionContext.getSession()).registerNamespace(
- prefix, uri);
+ registerNamespace(prefix, uri);
if (targetHandler != null) {
targetHandler.startPrefixMapping(prefix, uri);
} else {
@@ -202,4 +205,36 @@ public class ImportHandler extends DefaultHandler {
this.locator = locator;
}
+ /**
+ * This version is adapted from the
org.apache.jackrabbit.commons.NamespaceHelper.registerNamespace()
+ */
+ private void registerNamespace(String prefix, String uri)
+ throws RepositoryException {
+ try {
+ // Check if the namespace is registered
+ namespaceRegistry.getPrefix(uri);
+ } catch (NamespaceException e1) {
+ // Replace troublesome prefix hints
+ if (prefix == null || prefix.length() == 0
+ || prefix.toLowerCase().startsWith("xml")
+ || !XMLChar.isValidNCName(prefix)) {
+ prefix = "ns"; // ns, ns2, ns3, ns4, ...
+ }
+
+ // Loop until an unused prefix is found
+ try {
+ String base = prefix;
+ for (int i = 2; true; i++) {
+ namespaceRegistry.getURI(prefix);
+ prefix = base + i;
+ }
+ } catch (NamespaceException e2) {
+ // Exit the loop
+ }
+
+ // Register the namespace
+ namespaceRegistry.registerNamespace(prefix, uri);
+ }
+ }
+
}