You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2017/02/23 10:40:10 UTC
svn commit: r1784105 - in /sling/trunk/bundles/resourceresolver: ./
src/main/java/org/apache/sling/resourceresolver/impl/
Author: cziegeler
Date: Thu Feb 23 10:40:10 2017
New Revision: 1784105
URL: http://svn.apache.org/viewvc?rev=1784105&view=rev
Log:
SLING-6552 : ResourceResolver must be independent from javax.jcr
Added:
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java (with props)
Modified:
sling/trunk/bundles/resourceresolver/pom.xml
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java
sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
Modified: sling/trunk/bundles/resourceresolver/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/pom.xml?rev=1784105&r1=1784104&r2=1784105&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/pom.xml (original)
+++ sling/trunk/bundles/resourceresolver/pom.xml Thu Feb 23 10:40:10 2017
@@ -71,6 +71,14 @@
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Import-Package>
+ javax.jcr;resolution:=optional,
+ *
+ </Import-Package>
+ </instructions>
+ </configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java?rev=1784105&r1=1784104&r2=1784105&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/CommonResourceResolverFactoryImpl.java Thu Feb 23 10:40:10 2017
@@ -89,6 +89,9 @@ public class CommonResourceResolverFacto
private boolean logUnclosedResolvers;
+ private final Object optionalNamespaceMangler;
+
+
/**
* Create a new common resource resolver factory.
*/
@@ -111,6 +114,17 @@ public class CommonResourceResolverFacto
};
this.refQueueThread.setDaemon(true);
this.refQueueThread.start();
+
+ // try create namespace mangler
+ Object mangler = null;
+ if ( this.isMangleNamespacePrefixes() ) {
+ try {
+ mangler = new JcrNamespaceMangler();
+ } catch ( final Throwable t) {
+ LOG.info("Unable to create JCR namespace mangler: {}", t.getMessage());
+ }
+ }
+ this.optionalNamespaceMangler = mangler;
}
// ---------- Resource Resolver Factory ------------------------------------
@@ -336,6 +350,10 @@ public class CommonResourceResolverFacto
return this.activator.isMangleNamespacePrefixes();
}
+ public Object getNamespaceMangler() {
+ return this.optionalNamespaceMangler;
+ }
+
@Override
public String getMapRoot() {
return this.activator.getMapRoot();
@@ -449,7 +467,8 @@ public class CommonResourceResolverFacto
return activator.getResourceProviderTracker();
}
- public Map<String, Object> getServiceUserAuthenticationInfo(final String subServiceName)
+ @Override
+ public Map<String, Object> getServiceUserAuthenticationInfo(final String subServiceName)
throws LoginException {
// get an administrative resource resolver
// Ensure a mapped user name: If no user is defined for a bundle
@@ -469,7 +488,7 @@ public class CommonResourceResolverFacto
authenticationInfo.put(ResourceResolverFactory.SUBSERVICE, subServiceName);
authenticationInfo.put(ResourceResolverFactory.USER, userName);
authenticationInfo.put(ResourceProvider.AUTH_SERVICE_BUNDLE, bundle);
-
+
return authenticationInfo;
}
Added: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java?rev=1784105&view=auto
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java (added)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java Thu Feb 23 10:40:10 2017
@@ -0,0 +1,120 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.resourceresolver.impl;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.jcr.NamespaceException;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+import org.apache.sling.api.resource.ResourceResolver;
+import org.slf4j.Logger;
+
+public class JcrNamespaceMangler {
+
+ private static final String MANGLE_NAMESPACE_IN_SUFFIX = "_";
+
+ private static final String MANGLE_NAMESPACE_IN_PREFIX = "/_";
+
+ private static final Pattern MANGLE_NAMESPACE_IN_PATTERN = Pattern.compile("/_([^_/]+)_");
+
+ private static final String MANGLE_NAMESPACE_OUT_SUFFIX = ":";
+
+ private static final String MANGLE_NAMESPACE_OUT_PREFIX = "/";
+
+ private static final Pattern MANLE_NAMESPACE_OUT_PATTERN = Pattern.compile("/([^:/]+):");
+
+
+ public String mangleNamespaces(ResourceResolver resolver, Logger logger, String absPath) {
+ if (absPath.contains(MANGLE_NAMESPACE_OUT_SUFFIX)) {
+ final Session session = resolver.adaptTo(Session.class);
+ if ( session != null ) {
+ final Matcher m = MANLE_NAMESPACE_OUT_PATTERN.matcher(absPath);
+
+ final StringBuffer buf = new StringBuffer();
+ while (m.find()) {
+ final String namespace = m.group(1);
+ try {
+
+ // throws if "namespace" is not a registered
+ // namespace prefix
+ session.getNamespaceURI(namespace);
+ final String replacement = MANGLE_NAMESPACE_IN_PREFIX + namespace + MANGLE_NAMESPACE_IN_SUFFIX;
+ m.appendReplacement(buf, replacement);
+
+
+ } catch (final NamespaceException ne) {
+
+ // not a valid prefix
+ logger.debug("mangleNamespaces: '{}' is not a prefix, not mangling", namespace);
+
+ } catch (final RepositoryException re) {
+
+ logger.warn("mangleNamespaces: Problem checking namespace '{}'", namespace, re);
+
+ }
+ }
+
+ m.appendTail(buf);
+
+ absPath = buf.toString();
+ }
+ }
+
+ return absPath;
+ }
+
+ public String unmangleNamespaces(ResourceResolver resolver, Logger logger, String absPath) {
+ if (absPath.contains(MANGLE_NAMESPACE_IN_PREFIX)) {
+ final Session session = resolver.adaptTo(Session.class);
+ if ( session != null ) {
+ final Matcher m = MANGLE_NAMESPACE_IN_PATTERN.matcher(absPath);
+ final StringBuffer buf = new StringBuffer();
+ while (m.find()) {
+ final String namespace = m.group(1);
+ try {
+
+ // throws if "namespace" is not a registered
+ // namespace prefix
+ session.getNamespaceURI(namespace);
+ final String replacement = MANGLE_NAMESPACE_OUT_PREFIX + namespace + MANGLE_NAMESPACE_OUT_SUFFIX;
+ m.appendReplacement(buf, replacement);
+
+
+ } catch (final NamespaceException ne) {
+
+ // not a valid prefix
+ logger.debug("unmangleNamespaces: '{}' is not a prefix, not unmangling", namespace);
+
+ } catch (final RepositoryException re) {
+
+ logger.warn("unmangleNamespaces: Problem checking namespace '{}'", namespace, re);
+
+ }
+ }
+ m.appendTail(buf);
+ absPath = buf.toString();
+ }
+ }
+
+ return absPath;
+ }
+}
Propchange: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/JcrNamespaceMangler.java
------------------------------------------------------------------------------
svn:keywords = author date id revision rev url
Modified: sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java?rev=1784105&r1=1784104&r2=1784105&view=diff
==============================================================================
--- sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java (original)
+++ sling/trunk/bundles/resourceresolver/src/main/java/org/apache/sling/resourceresolver/impl/ResourceResolverImpl.java Thu Feb 23 10:40:10 2017
@@ -29,12 +29,8 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import javax.annotation.CheckForNull;
-import javax.jcr.NamespaceException;
-import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.servlet.http.HttpServletRequest;
@@ -73,18 +69,6 @@ public class ResourceResolverImpl extend
private static final Map<String, String> EMPTY_PARAMETERS = Collections.emptyMap();
- private static final String MANGLE_NAMESPACE_IN_SUFFIX = "_";
-
- private static final String MANGLE_NAMESPACE_IN_PREFIX = "/_";
-
- private static final Pattern MANGLE_NAMESPACE_IN_PATTERN = Pattern.compile("/_([^_/]+)_");
-
- private static final String MANGLE_NAMESPACE_OUT_SUFFIX = ":";
-
- private static final String MANGLE_NAMESPACE_OUT_PREFIX = "/";
-
- private static final Pattern MANLE_NAMESPACE_OUT_PATTERN = Pattern.compile("/([^:/]+):");
-
public static final String PROP_REDIRECT_INTERNAL = "sling:internalRedirect";
public static final String PROP_ALIAS = "sling:alias";
@@ -780,11 +764,6 @@ public class ResourceResolverImpl extend
return user.toString();
}
}
- // Try session
- final Session session = this.getSession();
- if ( session != null ) {
- return session.getUserID();
- }
// Try attributes
final Object impUser = this.getAttribute(ResourceResolverFactory.USER_IMPERSONATION);
if ( impUser != null ) {
@@ -799,19 +778,20 @@ public class ResourceResolverImpl extend
}
/** Cached session object, fetched on demand. */
- private Session cachedSession;
+ private Object cachedSession;
/** Flag indicating if a searching has already been searched. */
private boolean searchedSession = false;
/**
* Try to get a session from one of the resource providers.
*/
- private Session getSession() {
+ @SuppressWarnings("unchecked")
+ private <AdapterType> AdapterType getSession(final Class<AdapterType> type) {
if ( !this.searchedSession ) {
this.searchedSession = true;
- this.cachedSession = this.control.adaptTo(this.context, Session.class);
+ this.cachedSession = this.control.adaptTo(this.context, type);
}
- return this.cachedSession;
+ return (AdapterType) this.cachedSession;
}
// ---------- Adaptable interface
@@ -824,8 +804,8 @@ public class ResourceResolverImpl extend
public <AdapterType> AdapterType adaptTo(final Class<AdapterType> type) {
checkClosed();
- if (type == Session.class) {
- return (AdapterType) getSession();
+ if (type.getName().equals("javax.jcr.Session")) {
+ return getSession(type);
}
final AdapterType result = this.control.adaptTo(this.context, type);
if ( result != null ) {
@@ -1118,79 +1098,16 @@ public class ResourceResolverImpl extend
}
private String mangleNamespaces(String absPath) {
- if (factory.isMangleNamespacePrefixes() && absPath != null && absPath.contains(MANGLE_NAMESPACE_OUT_SUFFIX)) {
- final Matcher m = MANLE_NAMESPACE_OUT_PATTERN.matcher(absPath);
-
- final StringBuffer buf = new StringBuffer();
- while (m.find()) {
- final String namespace = m.group(1);
- try {
-
- // throws if "namespace" is not a registered
- // namespace prefix
- final Session session = getSession();
- if ( session != null ) {
- session.getNamespaceURI(namespace);
- final String replacement = MANGLE_NAMESPACE_IN_PREFIX + namespace + MANGLE_NAMESPACE_IN_SUFFIX;
- m.appendReplacement(buf, replacement);
- } else {
- logger.debug("mangleNamespaces: '{}' is not a prefix, not mangling", namespace);
- }
-
-
- } catch (final NamespaceException ne) {
-
- // not a valid prefix
- logger.debug("mangleNamespaces: '{}' is not a prefix, not mangling", namespace);
-
- } catch (final RepositoryException re) {
-
- logger.warn("mangleNamespaces: Problem checking namespace '{}'", namespace, re);
-
- }
- }
-
- m.appendTail(buf);
-
- absPath = buf.toString();
+ if ( absPath != null && factory.getNamespaceMangler() != null ) {
+ absPath = ((JcrNamespaceMangler)factory.getNamespaceMangler()).mangleNamespaces(this, logger, absPath);
}
return absPath;
}
private String unmangleNamespaces(String absPath) {
- if (factory.isMangleNamespacePrefixes() && absPath.contains(MANGLE_NAMESPACE_IN_PREFIX)) {
- final Matcher m = MANGLE_NAMESPACE_IN_PATTERN.matcher(absPath);
- final StringBuffer buf = new StringBuffer();
- while (m.find()) {
- final String namespace = m.group(1);
- try {
-
- // throws if "namespace" is not a registered
- // namespace prefix
- final Session session = getSession();
- if ( session != null ) {
- session.getNamespaceURI(namespace);
- final String replacement = MANGLE_NAMESPACE_OUT_PREFIX + namespace + MANGLE_NAMESPACE_OUT_SUFFIX;
- m.appendReplacement(buf, replacement);
- } else {
- logger.debug("unmangleNamespaces: '{}' is not a prefix, not unmangling", namespace);
- }
-
-
- } catch (final NamespaceException ne) {
-
- // not a valid prefix
- logger.debug("unmangleNamespaces: '{}' is not a prefix, not unmangling", namespace);
-
- } catch (final RepositoryException re) {
-
- logger.warn("unmangleNamespaces: Problem checking namespace '{}'", namespace, re);
-
- }
- }
- m.appendTail(buf);
- absPath = buf.toString();
+ if (absPath != null && factory.getNamespaceMangler() != null ) {
+ absPath = ((JcrNamespaceMangler)factory.getNamespaceMangler()).unmangleNamespaces(this, logger, absPath);
}
return absPath;