SLING-11728 Remove bi-directional dependencies between Engine and Servlets Resolver

* switch from org.apache.sling.engine.servlets.ErrorHandler to org.apache.sling.api.servlets.ErrorHandler
* update to Sling Bundle Parent 49
* update dependencies
* adjust and improve integration tests
diff --git a/pom.xml b/pom.xml
index 736dd24..88d7b56 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling-bundle-parent</artifactId>
-        <version>46</version>
+        <version>49</version>
         <relativePath />
     </parent>
 
@@ -171,7 +171,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.scripting.spi</artifactId>
-            <version>1.0.2</version>
+            <version>1.0.4</version>
             <scope>provided</scope>
         </dependency>
 
@@ -199,6 +199,7 @@
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
+            <scope>provided</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.geronimo.specs</groupId>
@@ -209,7 +210,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.api</artifactId>
-            <version>2.26.0</version>
+            <version>2.27.1-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <!-- for ServiceUserMapped (SLING-4312) -->
@@ -238,7 +239,7 @@
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.engine</artifactId>
-            <version>2.2.0</version>
+            <version>2.12.3-SNAPSHOT</version>
             <scope>provided</scope>
         </dependency>
         <dependency>
@@ -324,10 +325,12 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-simple</artifactId>
+            <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
@@ -374,16 +377,15 @@
         <dependency>
             <groupId>org.apache.felix</groupId>
             <artifactId>org.apache.felix.framework</artifactId>
-            <version>6.0.3</version>
+            <version>7.0.5</version>
             <scope>test</scope>
         </dependency>
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.servlet-helpers</artifactId>
-            <version>1.3.0</version>
+            <version>1.4.2</version>
             <scope>test</scope>
         </dependency>
-        <!-- compatible with API 2.24.0 -->
         <dependency>
             <groupId>org.apache.sling</groupId>
             <artifactId>org.apache.sling.resourceresolver</artifactId>
diff --git a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
index 3b23e07..81a99c9 100644
--- a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
+++ b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
@@ -49,10 +49,10 @@
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.resource.SyntheticResource;
+import org.apache.sling.api.servlets.ErrorHandler;
 import org.apache.sling.api.servlets.OptingServlet;
 import org.apache.sling.api.servlets.ServletResolver;
 import org.apache.sling.api.servlets.ServletResolverConstants;
-import org.apache.sling.engine.servlets.ErrorHandler;
 import org.apache.sling.serviceusermapping.ServiceUserMapped;
 import org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet;
 import org.apache.sling.servlets.resolver.internal.defaults.DefaultServlet;
@@ -266,7 +266,7 @@
     // ---------- ErrorHandler interface --------------------------------------
 
     /**
-     * @see org.apache.sling.engine.servlets.ErrorHandler#handleError(int,
+     * @see org.apache.sling.api.servlets.ErrorHandler#handleError(int,
      *      String, SlingHttpServletRequest, SlingHttpServletResponse)
      */
     @Override
@@ -325,7 +325,7 @@
     }
 
     /**
-     * @see org.apache.sling.engine.servlets.ErrorHandler#handleError(java.lang.Throwable, SlingHttpServletRequest, SlingHttpServletResponse)
+     * @see org.apache.sling.api.servlets.ErrorHandler#handleError(java.lang.Throwable, SlingHttpServletRequest, SlingHttpServletResponse)
      */
     @Override
     public void handleError(final Throwable throwable, final SlingHttpServletRequest request, final SlingHttpServletResponse response)
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
index 1c477ad..1789aa9 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResolverTestSupport.java
@@ -18,19 +18,6 @@
  */
 package org.apache.sling.servlets.resolver.it;
 
-import static org.apache.sling.testing.paxexam.SlingOptions.slingServlets;
-import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.vmOption;
-import static org.ops4j.pax.exam.CoreOptions.when;
-import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
-
 import java.lang.reflect.Method;
 
 import javax.inject.Inject;
@@ -45,10 +32,28 @@
 import org.apache.sling.testing.paxexam.TestSupport;
 import org.ops4j.pax.exam.Configuration;
 import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.options.ModifiableCompositeOption;
 import org.ops4j.pax.exam.options.extra.VMOption;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceReference;
 
+import static org.apache.sling.testing.paxexam.SlingOptions.sling;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingScripting;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingXss;
+import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
+import static org.apache.sling.testing.paxexam.SlingVersionResolver.SLING_GROUP_ID;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.vmOption;
+import static org.ops4j.pax.exam.CoreOptions.when;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
 public class ServletResolverTestSupport extends TestSupport {
 
     @Inject
@@ -91,24 +96,33 @@
             jacocoCommand = vmOption(jacocoOpt);
         }
 
-        
         final int httpPort = findFreePort();
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.api");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.resourceresolver");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.scripting.core");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.commons.johnzon");
-        versionResolver.setVersion("org.apache.sling", "org.apache.sling.engine", "2.7.2");
+        versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.api");
+        versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.resourceresolver");
+        versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.scripting.core");
+        versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.commons.johnzon");
+        versionResolver.setVersionFromProject(SLING_GROUP_ID, "org.apache.sling.engine");
+        versionResolver.setVersion(SLING_GROUP_ID, "org.apache.sling.auth.core", "1.6.0");
         return options(
             composite(
                 when(debugOption != null).useOptions(debugOption),
                 when(vmOption != null).useOptions(vmOption),
                 when(jacocoCommand != null).useOptions(jacocoCommand),
                 baseConfiguration(),
-                slingServlets(),
-                mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.converter").version("1.0.12"), // new Sling API dependency
-                testBundle("bundle.filename"),
+                sling(),
+                slingScripting(),
+                slingXss(),
+                factoryConfiguration("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended")
+                    .put("user.mapping", new String[]{"org.apache.sling.servlets.resolver:console=sling-readall", "org.apache.sling.servlets.resolver:scripts=sling-scripting"})
+                    .asOption(),
+
+                mavenBundle().groupId("org.osgi").artifactId("org.osgi.util.converter").version("1.0.9"), // new Sling API dependency
+                testBundle(),
                 mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.spi").versionAsInProject(),
                 mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlet-helpers").versionAsInProject(),
+                //
+                mavenBundle().groupId("commons-codec").artifactId("commons-codec").version("1.15"),
+                //
                 junitBundles(),
                 newConfiguration("org.apache.felix.http")
                     .put("org.osgi.service.http.port", httpPort)
@@ -123,12 +137,14 @@
                 newConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist")
                     .put("whitelist.bundles.regexp", "^PAXEXAM.*$")
                     .asOption()
-            ).remove(
-                mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver) // remove bundle from slingQuickstartOakTar, added via testBundle in current version
             )
         );
     }
 
+    protected Option testBundle() {
+        return testBundle("bundle.filename");
+    }
+
     protected MockSlingHttpServletResponse executeRequest(final String path, final int expectedStatus) throws Exception {
         return executeRequest("GET", path, expectedStatus);
     }
diff --git a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
index a80e09e..ee66b13 100644
--- a/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
+++ b/src/test/java/org/apache/sling/servlets/resolver/it/ServletResourceIT.java
@@ -31,7 +31,6 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -40,17 +39,13 @@
 import org.apache.sling.scripting.spi.bundle.BundledRenderUnit;
 import org.apache.sling.scripting.spi.bundle.TypeProvider;
 import org.apache.sling.servlets.resolver.internal.bundle.BundledScriptServlet;
-import org.apache.sling.testing.paxexam.TestSupport;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
-import org.ops4j.pax.exam.Configuration;
-import org.ops4j.pax.exam.CoreOptions;
 import org.ops4j.pax.exam.Option;
 import org.ops4j.pax.exam.junit.PaxExam;
-import org.ops4j.pax.exam.options.extra.VMOption;
 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerClass;
 import org.ops4j.pax.tinybundles.core.TinyBundle;
@@ -58,20 +53,13 @@
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 
-import static org.apache.sling.testing.paxexam.SlingOptions.slingServlets;
-import static org.apache.sling.testing.paxexam.SlingOptions.versionResolver;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.ops4j.pax.exam.CoreOptions.composite;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.CoreOptions.options;
-import static org.ops4j.pax.exam.CoreOptions.when;
-import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+import static org.ops4j.pax.exam.CoreOptions.streamBundle;
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
-public class ServletResourceIT extends TestSupport {
+public class ServletResourceIT extends ServletResolverTestSupport {
 
     private BundledRenderUnit bundledRenderUnit;
 
@@ -81,50 +69,15 @@
     @Inject
     private BundleContext bundleContext;
 
-    @Configuration
-    public Option[] ownConfiguration() throws FileNotFoundException {
-        TinyBundle bundle = TinyBundles.bundle().read(new FileInputStream(System.getProperty("bundle.filename")));
-        String header = bundle.getHeader("Export-Package");
-        bundle.set("Export-Package", header + ",org.apache.sling.servlets.resolver.internal.bundle");
-        final String vmOpt = System.getProperty("pax.vm.options");
-        VMOption vmOption = null;
-        if (StringUtils.isNotEmpty(vmOpt)) {
-            vmOption = new VMOption(vmOpt);
+    protected Option testBundle() {
+        try {
+            TinyBundle bundle = TinyBundles.bundle().read(new FileInputStream(System.getProperty("bundle.filename")));
+            String header = bundle.getHeader("Export-Package");
+            bundle.set("Export-Package", header + ",org.apache.sling.servlets.resolver.internal.bundle");
+            return streamBundle(bundle.build()).start();
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
         }
-        final int httpPort = findFreePort();
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.api");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.resourceresolver");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.scripting.core");
-        versionResolver.setVersionFromProject("org.apache.sling", "org.apache.sling.commons.johnzon");
-        versionResolver.setVersion("org.apache.sling", "org.apache.sling.engine", "2.7.2");
-
-        return options(
-                composite(
-                        when(vmOption != null).useOptions(vmOption),
-                        baseConfiguration(),
-                        slingServlets(),
-                        mavenBundle().groupId("org.apache.felix").artifactId("org.apache.felix.converter").version("1.0.12"), // new Sling API dependency
-                        mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.scripting.spi").versionAsInProject(),
-                        mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlet-helpers").versionAsInProject(),
-                        junitBundles(),
-                        newConfiguration("org.apache.felix.http")
-                                .put("org.osgi.service.http.port", httpPort)
-                                .asOption(),
-                        newConfiguration("org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl")
-                                .put("resource.resolver.required.providernames", "")
-                                .asOption(),
-                        buildBundleWithBnd(
-                                TestResourceProvider.class,
-                                TestServiceUserValidator.class
-                        ),
-                        newConfiguration("org.apache.sling.jcr.base.internal.LoginAdminWhitelist")
-                                .put("whitelist.bundles.regexp", "^PAXEXAM.*$")
-                                .asOption(),
-                        CoreOptions.streamBundle(bundle.build()).start()
-                ).remove(
-                        mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.servlets.resolver").version(versionResolver) // remove bundle from slingQuickstartOakTar, added via testBundle in current version
-                )
-        );
     }
 
     @Before