You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2017/11/06 16:14:50 UTC

[sling-org-apache-sling-testing-sling-mock] 01/01: import branch for 1.x from svn

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

sseifert pushed a commit to branch release/1.x
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-sling-mock.git

commit 44f2981b262f1719acc9fb8e7cfba4d5864f73ac
Author: sseifert <ss...@pro-vision.de>
AuthorDate: Mon Nov 6 17:14:09 2017 +0100

    import branch for 1.x from svn
---
 pom.xml                                            | 125 ++++++--------
 .../testing/mock/sling/MockAdapterManagerImpl.java | 181 +++++++++------------
 .../mock/sling/MockDynamicClassLoaderManager.java  |  33 ----
 .../testing/mock/sling/MockJcrSlingRepository.java |  14 +-
 .../apache/sling/testing/mock/sling/MockSling.java |  67 ++++++++
 .../sling/ResourceResolverFactoryInitializer.java  |  89 ++++++----
 .../testing/mock/sling/ResourceResolverType.java   |  14 ++
 .../sling/ThreadsafeMockAdapterManagerWrapper.java |   2 +-
 .../testing/mock/sling/builder/package-info.java   |   2 +-
 .../context/ContextResourceResolverFactory.java    |   7 +
 .../sling/context/ModelAdapterFactoryUtil.java     |  32 ++--
 .../mock/sling/context/SlingContextImpl.java       |  44 ++---
 .../testing/mock/sling/context/UniqueRoot.java     |  11 +-
 .../testing/mock/sling/context/package-info.java   |   2 +-
 .../testing/mock/sling/junit/SlingContext.java     |   3 +-
 .../mock/sling/junit/SlingContextBuilder.java      |   3 +-
 .../mock/sling/junit/SlingContextCallback.java     |   3 +-
 .../testing/mock/sling/junit/package-info.java     |   2 +-
 .../testing/mock/sling/loader/ContentLoader.java   |   2 +-
 .../testing/mock/sling/loader/package-info.java    |   2 +-
 .../sling/testing/mock/sling/package-info.java     |   2 +-
 .../mock/sling/services/MockMimeTypeService.java   |   6 +-
 .../testing/mock/sling/services/package-info.java  |   2 +-
 .../sling/servlet/MockSlingHttpServletRequest.java |  23 ++-
 .../testing/mock/sling/servlet/package-info.java   |   2 +-
 .../sling/testing/mock/sling/spi/package-info.java |   2 +-
 .../mock/sling/NodeTypeDefinitionScannerTest.java  |   1 +
 .../context/AbstractSlingContextImplTest.java      |   9 +-
 .../sling/context/NoResourceResolverTypeTest.java  |  18 +-
 .../testing/mock/sling/junit/SlingContextTest.java |  81 +--------
 .../sling/resource/AbstractJcrNamespaceTest.java   |   5 +-
 .../resource/AbstractJcrResourceResolverTest.java  |   6 +-
 .../AbstractSlingCrudResourceResolverTest.java     |  18 +-
 33 files changed, 392 insertions(+), 421 deletions(-)

diff --git a/pom.xml b/pom.xml
index f028e74..2f4503f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,12 +23,12 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>30</version>
+        <version>26</version>
         <relativePath />
     </parent>
 
     <artifactId>org.apache.sling.testing.sling-mock</artifactId>
-    <version>2.2.15-SNAPSHOT</version>
+    <version>1.9.11-SNAPSHOT</version>
     <packaging>bundle</packaging>
 
     <name>Apache Sling Testing Sling Mock</name>
@@ -45,7 +45,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.osgi-mock</artifactId>
-            <version>2.3.4</version>
+            <version>1.9.8</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -63,70 +63,63 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlet-helpers</artifactId>
-            <version>1.1.2</version>
-            <scope>compile</scope>
-        </dependency>
-
-        <dependency>
-            <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.osgi</artifactId>
-            <version>2.4.0</version>
+            <version>1.0.2</version>
             <scope>compile</scope>
         </dependency>
 
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.models.api</artifactId>
-            <version>1.2.2</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.models.impl</artifactId>
-            <version>1.2.2</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
     
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.11.0</version>
+            <version>2.4.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.resourceresolver</artifactId>
-            <version>1.4.8</version>
+            <version>1.1.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.api</artifactId>
-            <version>2.3.0</version>
+            <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.jcr.resource</artifactId>
-            <version>2.7.4</version>
+            <version>2.3.6</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.api</artifactId>
-            <version>2.1.8</version>
+            <version>2.1.6</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.core</artifactId>
-            <version>2.0.36</version>
+            <version>2.0.26</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.commons.mime</artifactId>
-            <version>2.1.8</version>
+            <version>2.1.4</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -143,26 +136,26 @@
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.commons.classloader</artifactId>
-            <version>1.3.2</version>
+            <artifactId>org.apache.sling.commons.osgi</artifactId>
+            <version>2.2.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.settings</artifactId>
-            <version>1.3.8</version>
+            <artifactId>org.apache.sling.commons.classloader</artifactId>
+            <version>1.3.0</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.i18n</artifactId>
-            <version>2.4.4</version>
+            <artifactId>org.apache.sling.settings</artifactId>
+            <version>1.2.2</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
-            <artifactId>org.apache.sling.adapter</artifactId>
-            <version>2.1.6</version>
+            <artifactId>org.apache.sling.i18n</artifactId>
+            <version>2.2.4</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -171,17 +164,11 @@
             <version>1.0.2</version>
             <scope>compile</scope>
         </dependency>
-        <dependency>
-            <groupId>org.apache.jackrabbit</groupId>
-            <artifactId>jackrabbit-api</artifactId>
-            <version>2.11.3</version>
-            <scope>compile</scope>
-        </dependency>
 
         <dependency>
             <groupId>commons-collections</groupId>
             <artifactId>commons-collections</artifactId>
-            <version>3.2.2</version>
+            <version>3.2.1</version>
             <scope>compile</scope>
         </dependency>
         <dependency>
@@ -206,19 +193,21 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
+            <version>3.0.1</version>
             <scope>compile</scope>
         </dependency>
     
         <dependency>
-          <groupId>org.apache.geronimo.specs</groupId>
-          <artifactId>geronimo-atinject_1.0_spec</artifactId>
-          <version>1.0</version>
-          <scope>compile</scope>
+            <groupId>javax.inject</groupId>
+            <artifactId>javax.inject</artifactId>
+            <version>1</version>
+            <scope>compile</scope>
         </dependency>
     
         <dependency>
             <groupId>javax.jcr</groupId>
             <artifactId>jcr</artifactId>
+            <version>2.0</version>
             <scope>compile</scope>
         </dependency>
     
@@ -236,7 +225,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.testing.logging-mock</artifactId>
-            <version>2.0.0</version>
+            <version>1.0.0</version>
             <scope>test</scope>
         </dependency>
 
@@ -247,62 +236,50 @@
     
           <!-- Publish test artifact -->
           <plugin>
-              <groupId>org.apache.maven.plugins</groupId>
-              <artifactId>maven-jar-plugin</artifactId>
-              <executions>
-                  <execution>
-                      <goals>
-                          <goal>test-jar</goal>
-                      </goals>
-                  </execution>
-              </executions>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-jar-plugin</artifactId>
+            <executions>
+              <execution>
+                <goals>
+                  <goal>test-jar</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+    
+          <plugin>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-bundle-plugin</artifactId>
+            <extensions>true</extensions>
           </plugin>
     
           <plugin>
-              <groupId>org.apache.felix</groupId>
-              <artifactId>maven-bundle-plugin</artifactId>
-              <extensions>true</extensions>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>maven-scr-plugin</artifactId>
           </plugin>
     
         </plugins>
     </build>
   
+    <!-- Profiles to run unit tests against different JCR Resource versions -->
     <profiles>
         <profile>
-            <id>latest-resource-bundles</id>
+            <id>jcr.resource-2.5.4</id>
             <dependencies>
                 <dependency>
                     <groupId>org.apache.sling</groupId>
                     <artifactId>org.apache.sling.api</artifactId>
-                    <version>2.16.2</version>
-                    <scope>compile</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.sling</groupId>
-                    <artifactId>org.apache.sling.resourceresolver</artifactId>
-                    <version>1.5.22</version>
+                    <version>2.9.0</version>
                     <scope>compile</scope>
                 </dependency>
                 <dependency>
                     <groupId>org.apache.sling</groupId>
                     <artifactId>org.apache.sling.jcr.resource</artifactId>
-                    <version>3.0.0</version>
+                    <version>2.5.4</version>
                     <scope>compile</scope>
                 </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>jackrabbit-api</artifactId>
-                    <version>2.13.4</version>
-                    <scope>provided</scope>
-                </dependency>
-                <dependency>
-                    <groupId>org.apache.jackrabbit</groupId>
-                    <artifactId>oak-jcr</artifactId>
-                    <version>1.5.15</version>
-                    <scope>provided</scope>
-                </dependency>
             </dependencies>
         </profile>
     </profiles>
-  
+    
 </project>
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
index b3f3825..889022b 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockAdapterManagerImpl.java
@@ -22,50 +22,41 @@ import static org.apache.sling.api.adapter.AdapterFactory.ADAPTABLE_CLASSES;
 import static org.apache.sling.api.adapter.AdapterFactory.ADAPTER_CLASSES;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Dictionary;
 import java.util.HashMap;
 import java.util.Hashtable;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import org.apache.sling.adapter.Adaption;
-import org.apache.sling.adapter.internal.AdapterFactoryDescriptor;
-import org.apache.sling.adapter.internal.AdapterFactoryDescriptorMap;
-import org.apache.sling.adapter.internal.AdaptionImpl;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.adapter.AdapterFactory;
 import org.apache.sling.api.adapter.AdapterManager;
 import org.apache.sling.commons.osgi.PropertiesUtil;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
-import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
-import org.osgi.service.component.annotations.Reference;
-import org.osgi.service.component.annotations.ReferenceCardinality;
-import org.osgi.service.component.annotations.ReferencePolicy;
 import org.osgi.service.event.Event;
 import org.osgi.service.event.EventAdmin;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.6,
+ * This is a copy of org.apache.sling.adapter.internal.AdpaterManagerImpl from Sling Adapter 2.1.0,
  * with all calls to SyntheticResource.setAdapterManager/unsetAdapterManager disabled, because this would
  * break the {@link ThreadsafeMockAdapterManagerWrapper} concept.
- * Additionally the reference to PackageAdmin is disabled.
  */
-@Component(immediate=true, service=AdapterManager.class,
-        property={Constants.SERVICE_DESCRIPTION + "=Sling Adapter Manager",
-                Constants.SERVICE_VENDOR + "=The Apache Software Foundation"},
-        reference = @Reference(name="AdapterFactory", service=AdapterFactory.class,
-                cardinality=ReferenceCardinality.MULTIPLE, policy=ReferencePolicy.DYNAMIC,
-                bind="bindAdapterFactory", unbind="unbindAdapterFactory")
-)
+@Component(immediate=true)
+@Service
+@Reference(name="AdapterFactory", referenceInterface=AdapterFactory.class,
+cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE, policy=ReferencePolicy.DYNAMIC)
 public class MockAdapterManagerImpl implements AdapterManager {
 
     private final Logger log = LoggerFactory.getLogger(getClass());
@@ -108,15 +99,9 @@ public class MockAdapterManagerImpl implements AdapterManager {
     /**
      * The service tracker for the event admin
      */
-    @Reference(cardinality=ReferenceCardinality.OPTIONAL, policy=ReferencePolicy.DYNAMIC)
+    @Reference(cardinality=ReferenceCardinality.OPTIONAL_UNARY, policy=ReferencePolicy.DYNAMIC)
     private volatile EventAdmin eventAdmin;
 
-    // DISABLED IN THIS COPY OF CLASS
-    /*
-    @Reference
-    private PackageAdmin packageAdmin;
-    */
-
     // ---------- AdapterManager interface -------------------------------------
 
     /**
@@ -214,7 +199,7 @@ public class MockAdapterManagerImpl implements AdapterManager {
     }
 
     /**
-     * Unbind a adapter factory.
+     * Unbind an adapter factory.
      * @param reference Service reference
      */
     protected void unbindAdapterFactory(final ServiceReference reference) {
@@ -257,21 +242,6 @@ public class MockAdapterManagerImpl implements AdapterManager {
             return;
         }
 
-        // DISABLED IN THIS COPY OF CLASS
-        /*
-        for (String clazz : adaptables) {
-            if (!checkPackage(packageAdmin, clazz)) {
-                log.warn("Adaptable class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
-            }
-        }
-
-        for (String clazz : adapters) {
-            if (!checkPackage(packageAdmin, clazz)) {
-                log.warn("Adapter class {} in factory service {} is not in an exported package.", clazz, reference.getProperty(Constants.SERVICE_ID));
-            }
-        }
-        */
-
         final AdapterFactoryDescriptor factoryDesc = new AdapterFactoryDescriptor(context,
                 reference, adapters);
 
@@ -292,51 +262,16 @@ public class MockAdapterManagerImpl implements AdapterManager {
         // clear the factory cache to force rebuild on next access
         this.factoryCache.clear();
 
-        // register adaption
-        final Dictionary<String, Object> props = new Hashtable<String, Object>();
-        props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables);
-        props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters);
-
-        ServiceRegistration adaptionRegistration = this.context.getBundleContext().registerService(
-                Adaption.class.getName(), AdaptionImpl.INSTANCE, props);
-        if (log.isDebugEnabled()) {
-            log.debug("Registered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(),
-                    SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables),
-                    SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) });
-        }
-        factoryDesc.setAdaption(adaptionRegistration);
-
         // send event
         final EventAdmin localEA = this.eventAdmin;
         if ( localEA != null ) {
+            final Dictionary<String, Object> props = new Hashtable<String, Object>();
+            props.put(SlingConstants.PROPERTY_ADAPTABLE_CLASSES, adaptables);
+            props.put(SlingConstants.PROPERTY_ADAPTER_CLASSES, adapters);
             localEA.postEvent(new Event(SlingConstants.TOPIC_ADAPTER_FACTORY_ADDED,
                     props));
         }
     }
-    
-    static String getPackageName(String clazz) {
-        final int lastDot = clazz.lastIndexOf('.');
-        return lastDot <= 0 ? "" : clazz.substring(0, lastDot);
-    }
-
-    /**
-     * Check that the package containing the class is exported or is a java.*
-     * class.
-     * 
-     * @param packageAdmin the PackageAdmin service
-     * @param clazz the class name
-     * @return true if the package is exported
-     */
-    // DISABLED IN THIS COPY OF CLASS
-    /*
-    static boolean checkPackage(PackageAdmin packageAdmin, String clazz) {
-        final String packageName = getPackageName(clazz); 
-        if (packageName.startsWith("java.")) {
-            return true;
-        }
-        return packageAdmin.getExportedPackage(packageName) != null;
-    }
-    */
 
     /**
      * Unregisters the {@link AdapterFactory} referred to by the service
@@ -356,25 +291,13 @@ public class MockAdapterManagerImpl implements AdapterManager {
 
         boolean factoriesModified = false;
         AdapterFactoryDescriptorMap adfMap = null;
-
-        AdapterFactoryDescriptor removedDescriptor = null;
         for (final String adaptable : adaptables) {
             synchronized ( this.descriptors ) {
                 adfMap = this.descriptors.get(adaptable);
             }
             if (adfMap != null) {
                 synchronized ( adfMap ) {
-                    AdapterFactoryDescriptor factoryDesc = adfMap.remove(reference);
-                    if (factoryDesc != null) {
-                        factoriesModified = true;
-                        // A single ServiceReference should correspond to a single Adaption service being registered
-                        // Since the code paths above does not fully guarantee it though, let's keep this check in place
-                        if (removedDescriptor != null && removedDescriptor != factoryDesc) {
-                            log.error("When unregistering reference {} got duplicate service descriptors {} and {}. Unregistration of {} services may be incomplete.",
-                                    new Object[] { reference, removedDescriptor, factoryDesc, Adaption.class.getName()} );
-                        }
-                        removedDescriptor = factoryDesc;
-                    }
+                    factoriesModified |= (adfMap.remove(reference) != null);
                 }
             }
         }
@@ -385,16 +308,6 @@ public class MockAdapterManagerImpl implements AdapterManager {
             this.factoryCache.clear();
         }
 
-        // unregister adaption
-        if (removedDescriptor != null) {
-            removedDescriptor.getAdaption().unregister();
-            if (log.isDebugEnabled()) {
-                log.debug("Unregistered service {} with {} : {} and {} : {}", new Object[] { Adaption.class.getName(),
-                        SlingConstants.PROPERTY_ADAPTABLE_CLASSES, Arrays.toString(adaptables),
-                        SlingConstants.PROPERTY_ADAPTER_CLASSES, Arrays.toString(adapters) });
-            }
-        }
-
         // send event
         final EventAdmin localEA = this.eventAdmin;
         if ( localEA != null ) {
@@ -515,4 +428,64 @@ public class MockAdapterManagerImpl implements AdapterManager {
             }
         }
     }
+
+
+    /**
+     * The <code>AdapterFactoryDescriptor</code> is an entry in the
+     * {@link AdapterFactoryDescriptorMap} conveying the list of adapter (target)
+     * types and the respective {@link AdapterFactory}.
+     */
+    private static class AdapterFactoryDescriptor {
+
+        private volatile AdapterFactory factory;
+
+        private final String[] adapters;
+
+        private final ServiceReference reference;
+
+        private final ComponentContext context;
+
+        public AdapterFactoryDescriptor(
+                final ComponentContext context,
+                final ServiceReference reference,
+                final String[] adapters) {
+            this.reference = reference;
+            this.context = context;
+            this.adapters = adapters;
+        }
+
+        public AdapterFactory getFactory() {
+            if ( factory == null ) {
+                factory = (AdapterFactory) context.locateService(
+                        "AdapterFactory", reference);
+            }
+            return factory;
+        }
+
+        public String[] getAdapters() {
+            return adapters;
+        }
+    }
+
+    /**
+     * The <code>AdapterFactoryDescriptorMap</code> is a sorted map of
+     * {@link AdapterFactoryDescriptor} instances indexed (and ordered) by their
+     * {@link ServiceReference}. This map is used to organize the
+     * registered {@link org.apache.sling.api.adapter.AdapterFactory} services for
+     * a given adaptable type.
+     * <p>
+     * Each entry in the map is a {@link AdapterFactoryDescriptor} thus enabling the
+     * registration of multiple factories for the same (adaptable, adapter) type
+     * tuple. Of course only the first entry (this is the reason for having a sorted
+     * map) for such a given tuple is actually being used. If that first instance is
+     * removed the eventual second instance may actually be used instead.
+     */
+    private static class AdapterFactoryDescriptorMap extends
+            TreeMap<ServiceReference, AdapterFactoryDescriptor> {
+
+        private static final long serialVersionUID = 2L;
+
+    }
+
+    
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java b/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java
deleted file mode 100644
index 2ec7f15..0000000
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockDynamicClassLoaderManager.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * 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.testing.mock.sling;
-
-import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
-
-/**
- * Mock implementation of {@link DynamicClassLoaderManager}.
- */
-class MockDynamicClassLoaderManager implements DynamicClassLoaderManager {
-
-    @Override
-    public ClassLoader getDynamicClassLoader() {
-        return MockDynamicClassLoaderManager.class.getClassLoader();
-    }
-
-}
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
index e3073cd..48fd567 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockJcrSlingRepository.java
@@ -26,16 +26,18 @@ import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
 
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.jcr.api.SlingRepository;
 import org.apache.sling.testing.mock.jcr.MockJcr;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Activate;
-import org.osgi.service.component.annotations.Component;
 
 /**
  * Mock {@link SlingRepository} implementation.
  */
-@Component(service = SlingRepository.class)
+@Component
+@Service(SlingRepository.class)
 public final class MockJcrSlingRepository implements SlingRepository {
 
     private Repository repository;
@@ -114,10 +116,4 @@ public final class MockJcrSlingRepository implements SlingRepository {
         return this.repository.login();
     }
 
-    @Override
-    public Session impersonateFromService(String subServiceName, Credentials credentials, String workspaceName)
-            throws LoginException, RepositoryException {
-        return this.repository.login(credentials);
-    }
-
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
index fdc222e..b53faae 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/MockSling.java
@@ -26,6 +26,7 @@ import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.scripting.SlingScriptHelper;
 import org.apache.sling.jcr.api.SlingRepository;
+import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse;
 import org.apache.sling.testing.mock.sling.spi.ResourceResolverTypeAdapter;
@@ -53,6 +54,18 @@ public final class MockSling {
 
     /**
      * Creates new sling resource resolver factory instance.
+     * @param type Type of underlying repository.
+     * @return Resource resolver factory instance
+     * @deprecated Please use {@link #newResourceResolverFactory(ResourceResolverType, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolverFactory newResourceResolverFactory(final ResourceResolverType type) {
+        return newResourceResolverFactory(type, MockOsgi.newBundleContext());
+    }
+    
+    /**
+     * Creates new sling resource resolver factory instance.
      * @param bundleContext Bundle context
      * @return Resource resolver factory instance
      */
@@ -106,6 +119,47 @@ public final class MockSling {
     }
 
     /**
+     * Creates new sling resource resolver factory instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE}.
+     * @return Resource resolver factory instance
+     * @deprecated Please use {@link #newResourceResolverFactory(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolverFactory newResourceResolverFactory() {
+        return newResourceResolverFactory(DEFAULT_RESOURCERESOLVER_TYPE);
+    }
+
+    /**
+     * Creates new sling resource resolver instance.
+     * @param type Type of underlying repository.
+     * @return Resource resolver instance
+     * @deprecated Please use {@link #newResourceResolver(ResourceResolverType, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolver newResourceResolver(final ResourceResolverType type) {
+        ResourceResolverFactory factory = newResourceResolverFactory(type);
+        try {
+            return factory.getAdministrativeResourceResolver(null);
+        } catch (LoginException ex) {
+            throw new RuntimeException("Mock resource resolver factory implementation seems to require login.", ex);
+        }
+    }
+
+    /**
+     * Creates new sling resource resolver instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE}.
+     * @return Resource resolver instance
+     * @deprecated Please use {@link #newResourceResolver(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static ResourceResolver newResourceResolver() {
+        return newResourceResolver(DEFAULT_RESOURCERESOLVER_TYPE);
+    }
+
+    /**
      * Creates new sling resource resolver instance.
      * @param type Type of underlying repository.
      * @param bundleContext Bundle context
@@ -145,6 +199,19 @@ public final class MockSling {
     /**
      * Creates a new sling script helper instance using
      * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver.
+     * @return Sling script helper instance
+     * @deprecated Please use {@link #newSlingScriptHelper(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public static SlingScriptHelper newSlingScriptHelper() {
+        BundleContext bundleContext = MockOsgi.newBundleContext();
+        return newSlingScriptHelper(bundleContext);
+    }
+
+    /**
+     * Creates a new sling script helper instance using
+     * {@link #DEFAULT_RESOURCERESOLVER_TYPE} for the resource resolver.
      * @param bundleContext Bundle context
      * @return Sling script helper instance
      */
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
index 5b64c58..dd8b69e 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverFactoryInitializer.java
@@ -23,16 +23,18 @@ import java.util.Hashtable;
 
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.query.Query;
 
+import org.apache.sling.api.resource.QueriableResourceProvider;
+import org.apache.sling.api.resource.ResourceProvider;
+import org.apache.sling.api.resource.ResourceProviderFactory;
 import org.apache.sling.api.resource.ResourceResolverFactory;
-import org.apache.sling.commons.classloader.DynamicClassLoaderManager;
 import org.apache.sling.jcr.api.SlingRepository;
-import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProvider;
+import org.apache.sling.jcr.resource.internal.helper.jcr.JcrResourceProviderFactory;
 import org.apache.sling.resourceresolver.impl.ResourceAccessSecurityTracker;
 import org.apache.sling.resourceresolver.impl.ResourceResolverFactoryActivator;
 import org.apache.sling.serviceusermapping.ServiceUserMapper;
 import org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl;
-import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.apache.sling.testing.mock.osgi.MockEventAdmin;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.framework.BundleContext;
@@ -63,16 +65,16 @@ class ResourceResolverFactoryInitializer {
             // register JCR node types found in classpath
             registerJcrNodeTypes(slingRepository, nodeTypeMode);
             
-            // initialize JCR resource provider
-            ensureJcrResourceProviderDependencies(bundleContext);
-            initializeJcrResourceProvider(bundleContext);
+            // initialize JCR resource provider factory
+            ensureJcrResourceProviderFactoryDependencies(bundleContext);
+            initializeJcrResourceProviderFactory(bundleContext);
         }
         
         // initialize resource resolver factory activator
         ensureResourceResolverFactoryActivatorDependencies(bundleContext);
         initializeResourceResolverFactoryActivator(bundleContext);
 
-        ServiceReference<ResourceResolverFactory> factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class);
+        ServiceReference factoryRef = bundleContext.getServiceReference(ResourceResolverFactory.class.getName());
         if (factoryRef == null) {
             throw new IllegalStateException("Unable to get ResourceResolverFactory.");
         }
@@ -80,34 +82,29 @@ class ResourceResolverFactoryInitializer {
     }
     
     /**
-     * Ensure dependencies for JcrResourceProvider are present.
+     * Ensure dependencies for JcrResourceProviderFactory are present.
      * @param bundleContext Bundle context
      */
-    @SuppressWarnings("unchecked")
-    private static void ensureJcrResourceProviderDependencies(BundleContext bundleContext) {
-        if (bundleContext.getServiceReference(DynamicClassLoaderManager.class) == null) {
-            bundleContext.registerService(DynamicClassLoaderManager.class, new MockDynamicClassLoaderManager(), null);
-        }
-        
-        try {
-            Class pathMapperClass = Class.forName("org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper");
-            registerServiceIfNotPresent(bundleContext, pathMapperClass, pathMapperClass.newInstance());
-        }
-        catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
-            // ignore - service was removed in org.apache.sling.jcr.resource 3.0.0
-        }
+    private static void ensureJcrResourceProviderFactoryDependencies(BundleContext bundleContext) {
+        // setup PathMapper which is a mandatory service for JcrProviderFactory (since org.apache.sling.jcr.resource 2.5.4)
+        // use reflection to not depend on it if running with older version of org.apache.sling.jcr.resource
+        registerServiceIfFoundInClasspath(bundleContext, "org.apache.sling.jcr.resource.internal.helper.jcr.PathMapper");
     }
  
     /**
-     * Initialize JCR resource provider.
+     * Initialize JCR resource provider factory.
      * @param bundleContext Bundle context
      */
-    private static void initializeJcrResourceProvider(BundleContext bundleContext) {
+    @SuppressWarnings("deprecation")
+    private static void initializeJcrResourceProviderFactory(BundleContext bundleContext) {
         Dictionary<String, Object> config = new Hashtable<String, Object>();
-        JcrResourceProvider provider = new JcrResourceProvider();
-        MockOsgi.injectServices(provider, bundleContext);
-        MockOsgi.activate(provider, bundleContext, config);
-        bundleContext.registerService(ResourceProvider.class, provider, config);
+        config.put(ResourceProvider.ROOTS, new String[] { "/" });
+        config.put(QueriableResourceProvider.LANGUAGES, new String[] { Query.XPATH, Query.SQL, Query.JCR_SQL2 });
+
+        JcrResourceProviderFactory factory = new JcrResourceProviderFactory();
+        MockOsgi.injectServices(factory, bundleContext);
+        MockOsgi.activate(factory, bundleContext, config);
+        bundleContext.registerService(ResourceProviderFactory.class.getName(), factory, config);
     }
     
     /**
@@ -129,9 +126,8 @@ class ResourceResolverFactoryInitializer {
      */
     private static void initializeResourceResolverFactoryActivator(BundleContext bundleContext) {
         Dictionary<String, Object> config = new Hashtable<String, Object>();
-        // do not required a specific resource provider (otherwise "NONE" will not work)
-        config.put("resource.resolver.required.providers", "");
-        config.put("resource.resolver.required.providernames", "");
+        config.put("resource.resolver.required.providers", new String[0]);
+
         ResourceResolverFactoryActivator activator = new ResourceResolverFactoryActivator();
         MockOsgi.injectServices(activator, bundleContext);
         MockOsgi.activate(activator, bundleContext, config);
@@ -145,11 +141,10 @@ class ResourceResolverFactoryInitializer {
      * @param serviceClass Service class
      * @param instance Service instance
      */
-    private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, 
-            T instance) {
+    private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, 
+            Object instance) {
         registerServiceIfNotPresent(bundleContext, serviceClass, instance, new Hashtable<String, Object>());
     }
-    
     /**
      * Registers a service if the service class is found in classpath,
      * and if no service with this class is already registered.
@@ -158,12 +153,34 @@ class ResourceResolverFactoryInitializer {
      * @param instance Service instance
      * @param config OSGi config
      */
-    private static <T> void registerServiceIfNotPresent(BundleContext bundleContext, Class<T> serviceClass, 
-            T instance, Dictionary<String, Object> config) {
+    private static void registerServiceIfNotPresent(BundleContext bundleContext, Class<?> serviceClass, 
+            Object instance, Dictionary<String, Object> config) {
         if (bundleContext.getServiceReference(serviceClass.getName()) == null) {
             MockOsgi.injectServices(instance, bundleContext);
             MockOsgi.activate(instance, bundleContext, config);
-            bundleContext.registerService(serviceClass, instance, config);
+            bundleContext.registerService(serviceClass.getName(), instance, config);
+        }
+    }
+    
+    /**
+     * Registers a service if the service class is found in classpath,
+     * and if no service with this class is already registered.
+     * @param className Service class name
+     */
+    private static void registerServiceIfFoundInClasspath(BundleContext bundleContext, String className) {
+        try {
+            Class<?> serviceClass = Class.forName(className);
+            Object instance = serviceClass.newInstance();
+            registerServiceIfNotPresent(bundleContext, serviceClass, instance);
+        }
+        catch (ClassNotFoundException ex) {
+            // skip service registration
+        }
+        catch (InstantiationException e) {
+            // skip service registration
+        }
+        catch (IllegalAccessException e) {
+            // skip service registration
         }
     }
     
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
index f0d2b1d..e9d9b33 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ResourceResolverType.java
@@ -54,6 +54,20 @@ public enum ResourceResolverType {
     JCR_MOCK(MockJcrResourceResolverAdapter.class.getName(), null, NodeTypeMode.NAMESPACES_ONLY),
 
     /**
+     * Uses a real JCR Jackrabbit repository.
+     * <ul>
+     * <li>Uses the real Sling Resource Resolver and JCR Resource mapping
+     * implementation.</li>
+     * <li>The JCR repository is started on first access, this may take some
+     * seconds.</li>
+     * <li>Beware: The repository is not cleared for each unit test, so make
+     * sure us use a unique node path for each unit test.</li>
+     * </ul>
+     */
+    JCR_JACKRABBIT("org.apache.sling.testing.mock.sling.jackrabbit.JackrabbitMockResourceResolverAdapter",
+            "org.apache.sling:org.apache.sling.testing.sling-mock-jackrabbit", NodeTypeMode.NODETYPES_REQUIRED),
+
+    /**
      * Uses a real JCR Jackrabbit Oak repository.
      * <ul>
      * <li>Uses the real Sling Resource Resolver and JCR Resource mapping
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
index 428bd4c..d9c21e9 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/ThreadsafeMockAdapterManagerWrapper.java
@@ -87,7 +87,7 @@ class ThreadsafeMockAdapterManagerWrapper implements AdapterManager {
             if (bundleContext == null) {
                 setBundleContext(MockOsgi.newBundleContext());
             }
-            ServiceReference<AdapterManager> serviceReference = bundleContext.getServiceReference(AdapterManager.class);
+            ServiceReference serviceReference = bundleContext.getServiceReference(AdapterManager.class.getName());
             if (serviceReference != null) {
                 return (AdapterManager)bundleContext.getService(serviceReference);
             }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
index e8a9066..3c94555 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/builder/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Content builder for creating test content.
  */
-@org.osgi.annotation.versioning.Version("1.1")
+@aQute.bnd.annotation.Version("1.1")
 package org.apache.sling.testing.mock.sling.builder;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
index 65cf6d2..2448e07 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ContextResourceResolverFactory.java
@@ -48,6 +48,9 @@ final class ContextResourceResolverFactory {
             case JCR_MOCK:
                 initializeJcrMock(factory);
                 break;
+            case JCR_JACKRABBIT:
+                initializeJcrJackrabbit(factory);
+                break;
             case JCR_OAK:
                 initializeJcrOak(factory);
                 break;
@@ -71,6 +74,10 @@ final class ContextResourceResolverFactory {
         // nothing to do
     }
 
+    private static void initializeJcrJackrabbit(ResourceResolverFactory factory) {
+        // register sling node types?
+    }
+
     private static void initializeJcrOak(ResourceResolverFactory factory) {
         // register sling node types?
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
index 7ff2195..b47399c 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/ModelAdapterFactoryUtil.java
@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import java.security.cert.X509Certificate;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Dictionary;
@@ -189,6 +188,7 @@ final class ModelAdapterFactoryUtil {
     }
 
 
+    @SuppressWarnings("unused")
     private static class RegisterModelsBundle implements Bundle {
         
         private static final String MAGIC_STRING = "MOCKS-YOU-KNOW-WHAT-TO-SCAN";
@@ -218,14 +218,14 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Dictionary<String,String> getHeaders() {
+        public Dictionary getHeaders() {
             Dictionary<String, String> headers = new Hashtable<String, String>();
             headers.put(PACKAGE_HEADER, MAGIC_STRING);
             return headers;
         }
 
         @Override
-        public Enumeration<URL> findEntries(String path, String filePattern, boolean recurse) {
+        public Enumeration findEntries(String path, String filePattern, boolean recurse) {
             Vector<URL> urls = new Vector<URL>(); // NOPMD
             if (packageNames != null) {
                 urls.addAll(getModelClassUrlsForPackages(packageNames));
@@ -237,7 +237,7 @@ final class ModelAdapterFactoryUtil {
         }
         
         @Override
-        public Class<?> loadClass(String name) throws ClassNotFoundException {
+        public Class loadClass(String name) throws ClassNotFoundException {
             return getClass().getClassLoader().loadClass(name);
         }
 
@@ -292,12 +292,12 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public ServiceReference<?>[] getRegisteredServices() { // NOPMD
+        public ServiceReference[] getRegisteredServices() { // NOPMD
             return null;
         }
 
         @Override
-        public ServiceReference<?>[] getServicesInUse() { // NOPMD
+        public ServiceReference[] getServicesInUse() { // NOPMD
             return null;
         }
 
@@ -312,7 +312,7 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Dictionary<String,String> getHeaders(String locale) {
+        public Dictionary getHeaders(String locale) {
             return null;
         }
 
@@ -322,12 +322,12 @@ final class ModelAdapterFactoryUtil {
         }
 
         @Override
-        public Enumeration<URL> getResources(String name) throws IOException {
+        public Enumeration getResources(String name) throws IOException {
             return null;
         }
 
         @Override
-        public Enumeration<String> getEntryPaths(String path) {
+        public Enumeration getEntryPaths(String path) {
             return null;
         }
 
@@ -341,31 +341,31 @@ final class ModelAdapterFactoryUtil {
             return 0;
         }
 
-        @Override
-        public Map<X509Certificate, List<X509Certificate>> getSignerCertificates(int signersType) {
+        // this is part of org.osgi 4.2.0
+        public Map getSignerCertificates(int signersType) {
             return null;
         }
 
-        @Override
+        // this is part of org.osgi 4.2.0
         public Version getVersion() {
             return null;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public int compareTo(Bundle o) {
             return 0;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public <A> A adapt(Class<A> type) {
             return null;
         }
 
-        @Override
+        // this is part of osgi 5/6
         public File getDataFile(String filename) {
             return null;
         }
-        
+
     }
 
 }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
index 6d4fa7c..e10a24c 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/SlingContextImpl.java
@@ -50,14 +50,14 @@ import org.apache.sling.testing.mock.sling.services.MockSlingSettingService;
 import org.apache.sling.testing.mock.sling.servlet.MockRequestPathInfo;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletRequest;
 import org.apache.sling.testing.mock.sling.servlet.MockSlingHttpServletResponse;
-import org.osgi.annotation.versioning.ConsumerType;
-import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 
+import aQute.bnd.annotation.ConsumerType;
+
 /**
  * Defines Sling context objects with lazy initialization. Should not be used
  * directly but via the {@link org.apache.sling.testing.mock.sling.junit.SlingContext} JUnit
@@ -108,12 +108,7 @@ public class SlingContextImpl extends OsgiContextImpl {
             MockOsgi.setConfigForPid(bundleContext(), RESOURCERESOLVERFACTORYACTIVATOR_PID, this.resourceResolverFactoryActivatorProps);
         }
         
-        // automatically register resource resolver factory when ResourceResolverType != NONE,
-        // so the ResourceResolverFactory is available as OSGi service immediately
-        if (resourceResolverType != ResourceResolverType.NONE) {
-            resourceResolverFactory();
-        }
-        
+        this.resourceResolverFactory = newResourceResolverFactory();
         registerDefaultServices();
     }
     
@@ -124,13 +119,6 @@ public class SlingContextImpl extends OsgiContextImpl {
     protected ResourceResolverFactory newResourceResolverFactory() {
         return ContextResourceResolverFactory.get(this.resourceResolverType, bundleContext());
     }
-    
-    private ResourceResolverFactory resourceResolverFactory() {
-        if (this.resourceResolverFactory == null) {
-            this.resourceResolverFactory = newResourceResolverFactory();
-        }
-        return this.resourceResolverFactory;
-    }
 
     /**
      * Default services that should be available for every unit test
@@ -173,7 +161,14 @@ public class SlingContextImpl extends OsgiContextImpl {
             try {
                 Class<?> clazz = Class.forName(className);
                 registerInjectActivateService(clazz.newInstance());
-            } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+            }
+            catch (ClassNotFoundException ex) {
+                // ignore - probably not the latest sling models impl version
+            }
+            catch (InstantiationException e) {
+                // ignore - probably not the latest sling models impl version
+            }
+            catch (IllegalAccessException e) {
                 // ignore - probably not the latest sling models impl version
             }
         }
@@ -217,7 +212,6 @@ public class SlingContextImpl extends OsgiContextImpl {
         this.contentBuilder = null;
         this.resourceBuilder = null;
         this.uniqueRoot = null;
-        this.resourceResolverFactory = null;
         
         super.tearDown();
     }
@@ -228,16 +222,14 @@ public class SlingContextImpl extends OsgiContextImpl {
     public final ResourceResolverType resourceResolverType() {
         return this.resourceResolverType;
     }
-    
+
     /**
-     * Returns the singleton resource resolver bound to this context.
-     * It is automatically closed after the test.
      * @return Resource resolver
      */
     public final ResourceResolver resourceResolver() {
         if (this.resourceResolver == null) {
             try {
-                this.resourceResolver = this.resourceResolverFactory().getAdministrativeResourceResolver(null);
+                this.resourceResolver = this.resourceResolverFactory.getAdministrativeResourceResolver(null);
             } catch (LoginException ex) {
                 throw new RuntimeException("Creating resource resolver failed.", ex);
             }
@@ -317,9 +309,6 @@ public class SlingContextImpl extends OsgiContextImpl {
     }
 
     /**
-     * Creates a {@link ContentBuilder} object for easily creating test content.
-     * This API was part of Sling Mocks since version 1.x.
-     * You can use alternatively the {@link #build()} method and use the {@link ResourceBuilder} API.
      * @return Content builder for building test content
      */
     public ContentBuilder create() {
@@ -416,9 +405,9 @@ public class SlingContextImpl extends OsgiContextImpl {
      */
     public final void runMode(String... runModes) {
         Set<String> newRunModes = ImmutableSet.<String> builder().add(runModes).build();
-        ServiceReference<SlingSettingsService> ref = bundleContext().getServiceReference(SlingSettingsService.class);
+        ServiceReference ref = bundleContext().getServiceReference(SlingSettingsService.class.getName());
         if (ref != null) {
-            MockSlingSettingService slingSettings = (MockSlingSettingService)bundleContext().getService(ref);
+            MockSlingSettingService slingSettings = (MockSlingSettingService) bundleContext().getService(ref);
             slingSettings.setRunModes(newRunModes);
         }
     }
@@ -478,9 +467,6 @@ public class SlingContextImpl extends OsgiContextImpl {
                 .put(AdapterFactory.ADAPTER_CLASSES, new String[] {
                     adapterClass.getName()
                 })
-                // make sure this overlay has higher ranking than other adapter factories
-                // normally we should use Integer.MAX_VALUE for this - but due to SLING-7194 prefers lowest-ranking services first
-                .put(Constants.SERVICE_RANKING, Integer.MIN_VALUE)
                 .build());
     }
 
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
index f5f68d3..cc00d75 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/UniqueRoot.java
@@ -18,18 +18,21 @@
  */
 package org.apache.sling.testing.mock.sling.context;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER;
+
 import java.util.UUID;
 
 import org.apache.jackrabbit.JcrConstants;
 import org.apache.sling.api.resource.PersistenceException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceUtil;
-import org.osgi.annotation.versioning.ConsumerType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.ImmutableMap;
 
+import aQute.bnd.annotation.ConsumerType;
+
 /**
  * Manages unique root paths in JCR repository.
  * This is important for resource resolver types like JCR_JACKRABBIT  
@@ -79,7 +82,7 @@ public class UniqueRoot {
      */
     public final String content() {
         if (contentRoot == null) {
-            contentRoot = getOrCreateResource("/content/" + uniquePathPart, "sling:OrderedFolder");
+            contentRoot = getOrCreateResource("/content/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return contentRoot.getPath();
     }
@@ -91,7 +94,7 @@ public class UniqueRoot {
      */
     public final String apps() {
         if (appsRoot == null) {
-            appsRoot = getOrCreateResource("/apps/" + uniquePathPart, "sling:OrderedFolder");
+            appsRoot = getOrCreateResource("/apps/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return appsRoot.getPath();
     }
@@ -103,7 +106,7 @@ public class UniqueRoot {
      */
     public final String libs() {
         if (libsRoot == null) {
-            libsRoot = getOrCreateResource("/libs/" + uniquePathPart, "sling:OrderedFolder");
+            libsRoot = getOrCreateResource("/libs/" + uniquePathPart, NT_SLING_ORDERED_FOLDER);
         }
         return libsRoot.getPath();
     }
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
index 36a2859..cf0963d 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/context/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Sling context implementation for unit tests.
  */
-@org.osgi.annotation.versioning.Version("3.5")
+@aQute.bnd.annotation.Version("3.5")
 package org.apache.sling.testing.mock.sling.context;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
index bcd5da5..52aa2ff 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContext.java
@@ -29,7 +29,8 @@ import org.junit.rules.ExternalResource;
 import org.junit.rules.TestRule;
 import org.junit.runner.Description;
 import org.junit.runners.model.Statement;
-import org.osgi.annotation.versioning.ProviderType;
+
+import aQute.bnd.annotation.ProviderType;
 
 /**
  * JUnit rule for setting up and tearing down Sling context objects for unit tests.
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
index b9ca1c4..37780dd 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextBuilder.java
@@ -25,7 +25,8 @@ import org.apache.sling.testing.mock.osgi.context.ContextPlugin;
 import org.apache.sling.testing.mock.osgi.context.ContextPlugins;
 import org.apache.sling.testing.mock.osgi.context.OsgiContextImpl;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
-import org.osgi.annotation.versioning.ProviderType;
+
+import aQute.bnd.annotation.ProviderType;
 
 /**
  * Builder class for creating {@link SlingContext} instances with different sets of parameters.
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
index 79343c3..d4fc9c4 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/SlingContextCallback.java
@@ -19,7 +19,8 @@
 package org.apache.sling.testing.mock.sling.junit;
 
 import org.apache.sling.testing.mock.osgi.context.ContextCallback;
-import org.osgi.annotation.versioning.ConsumerType;
+
+import aQute.bnd.annotation.ConsumerType;
 
 /**
  * Callback interface for application-specific setup and teardown operations to
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
index a998c8f..dd040c1 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/junit/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Rule for providing easy access to Sling context in JUnit tests.
  */
-@org.osgi.annotation.versioning.Version("4.1")
+@aQute.bnd.annotation.Version("4.1")
 package org.apache.sling.testing.mock.sling.junit;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
index f62a1f1..751ab55 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/ContentLoader.java
@@ -458,7 +458,7 @@ public final class ContentLoader {
         for (String name : names) {
             String fileExtension = StringUtils.substringAfterLast(name, ".");
             if (bundleContext != null && StringUtils.isNotEmpty(fileExtension)) {
-                ServiceReference<MimeTypeService> ref = bundleContext.getServiceReference(MimeTypeService.class);
+                ServiceReference ref = bundleContext.getServiceReference(MimeTypeService.class.getName());
                 if (ref != null) {
                     MimeTypeService mimeTypeService = (MimeTypeService)bundleContext.getService(ref);
                     mimeType = mimeTypeService.getMimeType(fileExtension);
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
index 92b8da5..0851487 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/loader/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Helpers for importing test content into the mocked repositories / resource hierarchies.
  */
-@org.osgi.annotation.versioning.Version("1.1")
+@aQute.bnd.annotation.Version("1.1")
 package org.apache.sling.testing.mock.sling.loader;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
index c0dc58f..85ce5c4 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Sling APIs.
  */
-@org.osgi.annotation.versioning.Version("3.0")
+@aQute.bnd.annotation.Version("1.5")
 package org.apache.sling.testing.mock.sling;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
index a13ffa3..fbc6fb7 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/services/MockMimeTypeService.java
@@ -21,16 +21,18 @@ package org.apache.sling.testing.mock.sling.services;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.commons.mime.MimeTypeService;
 import org.apache.sling.commons.mime.internal.MimeTypeServiceImpl;
 import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.osgi.service.component.ComponentContext;
-import org.osgi.service.component.annotations.Component;
 
 /**
  * Mock {@link MimeTypeService} implementation.
  */
-@Component(service = MimeTypeService.class)
+@Component(inherit = false)
+@Service(MimeTypeService.class)
 public final class MockMimeTypeService extends MimeTypeServiceImpl {
 
     private boolean initialized;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
index 37315a7..e919159 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/services/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mocks for selected Sling services.
  */
-@org.osgi.annotation.versioning.Version("2.0.1")
+@aQute.bnd.annotation.Version("2.0")
 package org.apache.sling.testing.mock.sling.services;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
index 798ad02..a5afbe2 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/MockSlingHttpServletRequest.java
@@ -23,6 +23,7 @@ import java.util.ResourceBundle;
 
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.i18n.ResourceBundleProvider;
+import org.apache.sling.testing.mock.osgi.MockOsgi;
 import org.apache.sling.testing.mock.sling.MockSling;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
@@ -36,6 +37,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
 
     /**
      * Instantiate with default resource resolver
+     * @deprecated Please use {@link #MockSlingHttpServletRequest(BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public MockSlingHttpServletRequest() {
+        this(MockOsgi.newBundleContext());
+    }
+
+    /**
+     * Instantiate with default resource resolver
      * @param bundleContext Bundle context
      */
     public MockSlingHttpServletRequest(BundleContext bundleContext) {
@@ -44,6 +55,16 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
 
     /**
      * @param resourceResolver Resource resolver
+     * @deprecated Please use {@link #MockSlingHttpServletRequest(ResourceResolver, BundleContext)}
+     *   and shutdown the bundle context after usage.
+     */
+    @Deprecated
+    public MockSlingHttpServletRequest(ResourceResolver resourceResolver) {
+        this(resourceResolver, MockOsgi.newBundleContext());
+    }
+
+    /**
+     * @param resourceResolver Resource resolver
      * @param bundleContext Bundle context
      */
     public MockSlingHttpServletRequest(ResourceResolver resourceResolver, BundleContext bundleContext) {
@@ -63,7 +84,7 @@ public class MockSlingHttpServletRequest extends org.apache.sling.servlethelpers
     public ResourceBundle getResourceBundle(String baseName, Locale locale) {
         // check of ResourceBundleProvider is registered in mock OSGI context
         ResourceBundle resourceBundle = null;
-        ServiceReference<ResourceBundleProvider> serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class);
+        ServiceReference serviceReference = bundleContext.getServiceReference(ResourceBundleProvider.class.getName());
         if (serviceReference != null) {
             ResourceBundleProvider provider = (ResourceBundleProvider)bundleContext.getService(serviceReference);
             resourceBundle = provider.getResourceBundle(baseName, locale);
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
index 4d35479..0408710 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/servlet/package-info.java
@@ -19,5 +19,5 @@
 /**
  * Mock implementation of selected Servlet-related Sling APIs.
  */
-@org.osgi.annotation.versioning.Version("3.0")
+@aQute.bnd.annotation.Version("2.0")
 package org.apache.sling.testing.mock.sling.servlet;
diff --git a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
index 99975db..0316d03 100644
--- a/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
+++ b/src/main/java/org/apache/sling/testing/mock/sling/spi/package-info.java
@@ -19,5 +19,5 @@
 /**
  * SPI for hooking in alternative resource type adapter implementations.
  */
-@org.osgi.annotation.versioning.Version("1.0")
+@aQute.bnd.annotation.Version("1.0")
 package org.apache.sling.testing.mock.sling.spi;
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
index 032129b..1b1f888 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/NodeTypeDefinitionScannerTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue;
 
 import java.util.List;
 
+import org.apache.sling.testing.mock.sling.NodeTypeDefinitionScanner;
 import org.junit.Test;
 
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
index 4c2d13b..6299dfb 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/context/AbstractSlingContextImplTest.java
@@ -48,9 +48,6 @@ public abstract class AbstractSlingContextImplTest {
 
     @Before
     public void setUp() throws Exception {
-        // make sure ResourceResolverFactory is available immediately and not lazily
-        assertEquals(1, context.getServices(ResourceResolverFactory.class, null).length);
-
         context.addModelsForPackage("org.apache.sling.testing.mock.sling.context.models");
         
         ContentLoader contentLoader = this.context.load();
@@ -141,4 +138,10 @@ public abstract class AbstractSlingContextImplTest {
         assertTrue(newRunModes.contains("mode2"));
     }
     
+    @Test
+    public void testResourceResolverFactory() {
+        ResourceResolverFactory[] factories = context.getServices(ResourceResolverFactory.class, null);
+        assertEquals(1, factories.length);
+    }
+
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
index 5af4d3e..23369ea 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/context/NoResourceResolverTypeTest.java
@@ -18,37 +18,23 @@
  */
 package org.apache.sling.testing.mock.sling.context;
 
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNull;
 
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.SyntheticResource;
-import org.apache.sling.spi.resource.provider.ResourceProvider;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.apache.sling.testing.mock.sling.junit.SlingContext;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.runners.MockitoJUnitRunner;
 
-@RunWith(MockitoJUnitRunner.class)
 public class NoResourceResolverTypeTest {
 
     @Rule
     public SlingContext context = new SlingContext(ResourceResolverType.NONE);
     
-    @Mock
-    private ResourceProvider<?> resourceProvider;
-    
     @Test
     public void testRoot() {
-        // resgister dummy resource provider because otherwise ResourceResolverFactory get's not activated
-        // with lates sling resource resolver implementation
-        context.registerService(ResourceProvider.class, resourceProvider,
-                ResourceProvider.PROPERTY_ROOT, "/");
-        
         Resource root = context.resourceResolver().getResource("/");
-        assertTrue(root instanceof SyntheticResource);
+        assertNull(root);
     }
     
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
index 8caef09..ead89a6 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/junit/SlingContextTest.java
@@ -24,10 +24,9 @@ import static org.junit.Assert.assertNull;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
 
-import org.apache.sling.api.adapter.AdapterFactory;
-import org.apache.sling.api.adapter.SlingAdaptable;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.testing.mock.sling.ResourceResolverType;
 import org.junit.Before;
 import org.junit.Rule;
@@ -47,16 +46,18 @@ public class SlingContextTest {
     private final SlingContextCallback contextAfterTeardown = mock(SlingContextCallback.class);
 
     // Run all unit tests for each resource resolver types listed here
+    @SuppressWarnings("unchecked")
     @Rule
     public SlingContext context = new SlingContextBuilder(ResourceResolverType.JCR_MOCK)
         .beforeSetUp(contextBeforeSetup)
         .afterSetUp(contextAfterSetup)
         .beforeTearDown(contextBeforeTeardown)
         .afterTearDown(contextAfterTeardown)
-        .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of(
-                "resource.resolver.searchpath", new String[] {"/apps","/libs","/testpath"},
-                "resource.resolver.mapping", new String[] {"/:/", "/content/test/</"}
-                ))
+        .resourceResolverFactoryActivatorProps(ImmutableMap.<String, Object>of("resource.resolver.searchpath", new String[] {
+            "/apps",
+            "/libs",
+            "/testpath",
+        }))
         .build();
 
     @Before
@@ -109,33 +110,6 @@ public class SlingContextTest {
     }
 
     @Test
-    public void testRegisterAdapterOverlayStatic() {
-        prepareInitialAdapterFactory();
-        
-        // register overlay adapter with static adaption
-        context.registerAdapter(TestAdaptable.class, String.class, "static-adaption");
-
-        // test overlay adapter with static adaption
-        assertEquals("static-adaption", new TestAdaptable("testMessage2").adaptTo(String.class));
-    }
-
-    @Test
-    public void testRegisterAdapterOverlayDynamic() {
-        prepareInitialAdapterFactory();
-        
-        // register overlay adapter with dynamic adaption
-        context.registerAdapter(TestAdaptable.class, String.class, new Function<TestAdaptable, String>() {
-            @Override
-            public String apply(TestAdaptable input) {
-                return input.getMessage() + "-dynamic";
-            }
-        });
-
-        // test overlay adapter with dynamic adaption
-        assertEquals("testMessage3-dynamic", new TestAdaptable("testMessage3").adaptTo(String.class));
-    }
-    
-    @Test
     public void testResourceBuilder() {
         
         context.build().resource("/test1", "prop1", "value1")
@@ -145,48 +119,9 @@ public class SlingContextTest {
         
         Resource test1 = context.resourceResolver().getResource("/test1");
         assertNotNull(test1);
-        assertEquals("value1", test1.getValueMap().get("prop1", String.class));
+        assertEquals("value1", ResourceUtil.getValueMap(test1).get("prop1", String.class));
         assertNotNull(test1.getChild("a"));
         assertNotNull(test1.getChild("b"));
     }
-    
-    @Test
-    public void testUrlMapping() {
-        assertEquals("/foo", context.resourceResolver().map("/content/test/foo"));
-    }
-    
-    
-    private void prepareInitialAdapterFactory() {
-        // register "traditional" adapter factory without specific service ranking
-        AdapterFactory adapterFactory = new AdapterFactory() {
-            @SuppressWarnings("unchecked")
-            @Override
-            public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
-                return (AdapterType)(((TestAdaptable)adaptable).getMessage() + "-initial");
-            }
-        };
-        context.registerService(AdapterFactory.class, adapterFactory, ImmutableMap.<String, Object>builder()
-                .put(AdapterFactory.ADAPTABLE_CLASSES, new String[] { TestAdaptable.class.getName() })
-                .put(AdapterFactory.ADAPTER_CLASSES, new String[] { String.class.getName() })
-                .build());
-        
-        // test initial adapter factory
-        assertEquals("testMessage1-initial", new TestAdaptable("testMessage1").adaptTo(String.class));        
-    }
-
-
-    private static class TestAdaptable extends SlingAdaptable {
         
-        private final String message;
-
-        public TestAdaptable(String message) {
-            this.message = message;
-        }
-
-        public String getMessage() {
-            return message;
-        }
-        
-    }
-
 }
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
index 3fedcca..427e338 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrNamespaceTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.sling.testing.mock.sling.resource;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY;
 import static org.junit.Assert.assertEquals;
 
 import javax.jcr.RepositoryException;
@@ -56,7 +57,7 @@ public abstract class AbstractJcrNamespaceTest {
         Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo");
         
         ValueMap props = ResourceUtil.getValueMap(resource);
-        assertEquals("fooType", props.get("sling:resourceType"));
+        assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY));
         assertEquals("fooType", resource.getResourceType());
         
         MockOsgi.shutdown(bundleContext);
@@ -72,7 +73,7 @@ public abstract class AbstractJcrNamespaceTest {
         Resource resource = resolver.getResource(context.uniqueRoot().content() + "/foo");
         
         ValueMap props = ResourceUtil.getValueMap(resource);
-        assertEquals("fooType", props.get("sling:resourceType"));
+        assertEquals("fooType", props.get(SLING_RESOURCE_TYPE_PROPERTY));
         assertEquals("fooType", resource.getResourceType());
     }
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
index 8b6251a..2726da9 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractJcrResourceResolverTest.java
@@ -18,6 +18,8 @@
  */
 package org.apache.sling.testing.mock.sling.resource;
 
+import static org.apache.sling.jcr.resource.JcrResourceConstants.NT_SLING_ORDERED_FOLDER;
+import static org.apache.sling.jcr.resource.JcrResourceConstants.SLING_RESOURCE_TYPE_PROPERTY;
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
@@ -151,7 +153,7 @@ public abstract class AbstractJcrResourceResolverTest {
         Resource parent = context.resourceResolver().getResource(getTestRootNode().getPath());
 
         Resource child = context.resourceResolver().create(parent, "nodeTypeResource", ImmutableMap.<String, Object> builder()
-                .put("sling:resourceType", JcrConstants.NT_UNSTRUCTURED).build());
+                .put(SLING_RESOURCE_TYPE_PROPERTY, JcrConstants.NT_UNSTRUCTURED).build());
         assertNotNull(child);
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.getResourceType());
         assertEquals(JcrConstants.NT_UNSTRUCTURED, child.adaptTo(Node.class).getPrimaryNodeType().getName());
@@ -164,7 +166,7 @@ public abstract class AbstractJcrResourceResolverTest {
         Resource child = ResourceUtil.getOrCreateResource(context.resourceResolver(), parent.getPath() + "/intermediate/child",
                 "sling/resource/type", JcrConstants.NT_UNSTRUCTURED, true);
         assertNotNull(child);
-        assertEquals("sling:OrderedFolder", parent.getResourceType());
+        assertEquals(NT_SLING_ORDERED_FOLDER, parent.getResourceType());
         assertEquals("sling/resource/type", child.getResourceType());
     }
 
diff --git a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
index 7b0d5e7..a98c26e 100644
--- a/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
+++ b/src/test/java/org/apache/sling/testing/mock/sling/resource/AbstractSlingCrudResourceResolverTest.java
@@ -169,16 +169,26 @@ public abstract class AbstractSlingCrudResourceResolverTest {
     public void testDateProperty() throws IOException {
         Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
         ValueMap props = ResourceUtil.getValueMap(resource1);
-        assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
+        // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846)
+        if (getResourceResolverType() != ResourceResolverType.JCR_MOCK
+                && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT 
+                && getResourceResolverType() != ResourceResolverType.JCR_OAK ) {
+            assertEquals(DATE_VALUE, props.get("dateProp", Date.class));
+        }
     }
 
     @Test
     public void testDatePropertyToCalendar() throws IOException {
         Resource resource1 = context.resourceResolver().getResource(getTestRootResource().getPath() + "/node1");
         ValueMap props = ResourceUtil.getValueMap(resource1);
-        Calendar calendarValue = props.get("dateProp", Calendar.class);
-        assertNotNull(calendarValue);
-        assertEquals(DATE_VALUE, calendarValue.getTime());
+        // TODO: enable this test when JCR resource implementation supports writing Date objects (SLING-3846)
+        if (getResourceResolverType() != ResourceResolverType.JCR_MOCK
+                && getResourceResolverType() != ResourceResolverType.JCR_JACKRABBIT
+                && getResourceResolverType() != ResourceResolverType.JCR_OAK ) {
+            Calendar calendarValue = props.get("dateProp", Calendar.class);
+            assertNotNull(calendarValue);
+            assertEquals(DATE_VALUE, calendarValue.getTime());
+        }
     }
 
     @Test

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.