Author: fmeschbe
Date: Mon May  4 07:46:45 2009
New Revision: 771223

URL: http://svn.apache.org/viewvc?rev=771223&view=rev
Log:
SLING-951 Don't cache namespace prefixes any more

Modified:
    
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver2.java
    
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java

Modified: 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver2.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver2.java?rev=771223&r1=771222&r2=771223&view=diff
==============================================================================
--- 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver2.java
 (original)
+++ 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/JcrResourceResolver2.java
 Mon May  4 07:46:45 2009
@@ -29,6 +29,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import javax.jcr.NamespaceException;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
@@ -756,15 +757,34 @@
 
     private String unmangleNamespaces(String absPath) {
         if (factory.isMangleNamespacePrefixes() && 
absPath.contains(MANGLE_NAMESPACE_IN_PREFIX)) {
-            Set<String> namespaces = resourceMapper.getNamespacePrefixes();
             Pattern p = Pattern.compile(MANGLE_NAMESPACE_IN);
             Matcher m = p.matcher(absPath);
             StringBuffer buf = new StringBuffer();
             while (m.find()) {
                 String namespace = m.group(1);
-                if (namespaces.contains(namespace)) {
-                    String replacement = MANGLE_NAMESPACE_OUT_PREFIX + 
namespace + MANGLE_NAMESPACE_OUT_SUFFIX;
+                try {
+
+                    // throws if "namespace" is not a registered
+                    // namespace prefix
+                    getSession().getNamespaceURI(namespace);
+                    
+                    String replacement = MANGLE_NAMESPACE_OUT_PREFIX
+                        + namespace + MANGLE_NAMESPACE_OUT_SUFFIX;
                     m.appendReplacement(buf, replacement);
+                    
+                } catch (NamespaceException ne) {
+                    
+                    // not a valid prefix
+                    log.debug(
+                        "unmangleNamespaces: '{}' is not a prefix, not 
unmangling",
+                        namespace);
+                    
+                } catch (RepositoryException re) {
+                    
+                    log.warn(
+                        "unmangleNamespaces: Problem checking namespace '{}'",
+                        namespace, re);
+                    
                 }
             }
             m.appendTail(buf);

Modified: 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java
URL: 
http://svn.apache.org/viewvc/incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java?rev=771223&r1=771222&r2=771223&view=diff
==============================================================================
--- 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java
 (original)
+++ 
incubator/sling/trunk/bundles/jcr/resource/src/main/java/org/apache/sling/jcr/resource/internal/helper/MapEntries.java
 Mon May  4 07:46:45 2009
@@ -72,8 +72,6 @@
 
     private Collection<MapEntry> mapMaps;
 
-    private Set<String> namespaces;
-
     private boolean initializing = false;
 
     private MapEntries() {
@@ -83,7 +81,6 @@
 
         resolveMaps = Collections.<MapEntry> emptyList();
         mapMaps = Collections.<MapEntry> emptyList();
-        namespaces = Collections.<String> emptySet();
     }
 
     public MapEntries(JcrResourceResolverFactoryImpl factory,
@@ -193,23 +190,6 @@
         return mapMaps;
     }
 
-    public Set<String> getNamespacePrefixes() {
-        if (namespaces == null) {
-
-            // get the current set of namespaces, we cache throughout our
-            // life time..
-            String[] namespaceList;
-            try {
-                namespaceList = getSession().getNamespacePrefixes();
-            } catch (RepositoryException re) {
-                namespaceList = new String[0];
-            }
-
-            namespaces = new HashSet<String>(Arrays.asList(namespaceList));
-        }
-        return namespaces;
-    }
-
     public Session getSession() {
         return session;
     }


Reply via email to