Add some IT for the example, remove some System.out, and organize imports.
diff --git a/pom.xml b/pom.xml
index dc8ff4c..848b7f9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -177,6 +177,13 @@
             <version>1.1.12</version>
             <scope>test</scope>
         </dependency>
+
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.7.3</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <profiles>
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptContext.java b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptContext.java
index e6af123..0031f11 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptContext.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptContext.java
@@ -18,16 +18,15 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.Reader;
-import java.io.Writer;
-import java.util.Arrays;
-import java.util.List;
+import org.apache.sling.api.scripting.SlingScriptConstants;
 
 import javax.script.Bindings;
 import javax.script.SimpleBindings;
 import javax.script.SimpleScriptContext;
-
-import org.apache.sling.api.scripting.SlingScriptConstants;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.Arrays;
+import java.util.List;
 
 class BundledScriptContext extends SimpleScriptContext {
 
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptFinder.java b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptFinder.java
index deab1bb..2a271b4 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptFinder.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptFinder.java
@@ -18,21 +18,20 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import javax.script.ScriptEngineFactory;
-import javax.script.ScriptEngineManager;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.osgi.framework.Bundle;
 import org.osgi.service.component.annotations.Component;
 import org.osgi.service.component.annotations.Reference;
 
+import javax.script.ScriptEngineFactory;
+import javax.script.ScriptEngineManager;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
 @Component(
         service = BundledScriptFinder.class
 )
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptServlet.java b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptServlet.java
index 0c1f0ca..49f5491 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptServlet.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptServlet.java
@@ -18,13 +18,13 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.sling.api.SlingConstants;
+import org.apache.sling.api.SlingHttpServletRequest;
+import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.request.RequestPathInfo;
+import org.apache.sling.api.scripting.ScriptEvaluationException;
+import org.osgi.framework.Bundle;
 
 import javax.script.ScriptContext;
 import javax.script.ScriptException;
@@ -33,16 +33,12 @@
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang3.StringUtils;
-import org.apache.sling.api.SlingConstants;
-import org.apache.sling.api.SlingHttpServletRequest;
-import org.apache.sling.api.SlingHttpServletResponse;
-import org.apache.sling.api.request.RequestPathInfo;
-import org.apache.sling.api.scripting.ScriptEvaluationException;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.Version;
-import org.osgi.framework.wiring.BundleWiring;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 class BundledScriptServlet extends GenericServlet {
 
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptTracker.java b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptTracker.java
index 8f6a9bc..60bccd9 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptTracker.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/BundledScriptTracker.java
@@ -18,43 +18,11 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.IOException;
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Hashtable;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Set;
-import java.util.function.Function;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import javax.servlet.GenericServlet;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRegistration;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletResponse;
-
+import aQute.bnd.annotation.headers.ProvideCapability;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.request.RequestDispatcherOptions;
-import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceUtil;
-import org.apache.sling.api.resource.ResourceWrapper;
-import org.apache.sling.api.resource.SyntheticResource;
 import org.apache.sling.api.servlets.ServletResolverConstants;
 import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.osgi.framework.Bundle;
@@ -76,7 +44,27 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import aQute.bnd.annotation.headers.ProvideCapability;
+import javax.servlet.GenericServlet;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Component(
         service = {}
@@ -409,7 +397,6 @@
                 RequestDispatcherOptions options = new RequestDispatcherOptions();
                 options.setForceResourceType(rt);
 
-                System.out.println("found: " + rt);
                 RequestDispatcher dispatcher = slingRequest.getRequestDispatcher(slingRequest.getResource(), options);
                 if (dispatcher != null)
                 {
@@ -422,7 +409,6 @@
             }
             else
             {
-                System.out.println("Not found");
                 ((SlingHttpServletResponse) res).sendError(HttpServletResponse.SC_NOT_FOUND);
             }
         }
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/LogWriter.java b/src/main/java/org/apache/sling/scripting/resolver/internal/LogWriter.java
index aaf6925..00a9b39 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/LogWriter.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/LogWriter.java
@@ -18,10 +18,10 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.Writer;
-
 import org.slf4j.Logger;
 
+import java.io.Writer;
+
 class LogWriter extends Writer {
 
     /** The logger to which the error messages are written */
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/ProtectedBindings.java b/src/main/java/org/apache/sling/scripting/resolver/internal/ProtectedBindings.java
index 1f0ac33..e2cb89d 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/ProtectedBindings.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/ProtectedBindings.java
@@ -18,13 +18,12 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
+import javax.script.Bindings;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
-import javax.script.Bindings;
-
 class ProtectedBindings implements Bindings {
 
     private final Bindings wrapped;
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/RequestWrapper.java b/src/main/java/org/apache/sling/scripting/resolver/internal/RequestWrapper.java
index 536f3bb..4e5c1d8 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/RequestWrapper.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/RequestWrapper.java
@@ -18,16 +18,15 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.util.Set;
-
-import javax.servlet.RequestDispatcher;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestDispatcherOptions;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.wrappers.SlingHttpServletRequestWrapper;
 
+import javax.servlet.RequestDispatcher;
+import java.util.Set;
+
 class RequestWrapper extends SlingHttpServletRequestWrapper {
 
     private final Set<String> wiredResourceTypes;
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/Script.java b/src/main/java/org/apache/sling/scripting/resolver/internal/Script.java
index 1353138..a97fd8c 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/Script.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/Script.java
@@ -18,21 +18,20 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.IOException;
-import java.io.StringReader;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
+import org.apache.commons.io.IOUtils;
+import org.apache.sling.scripting.core.ScriptNameAwareReader;
 
 import javax.script.Compilable;
 import javax.script.CompiledScript;
 import javax.script.ScriptContext;
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.sling.scripting.core.ScriptNameAwareReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 class Script {
 
diff --git a/src/main/java/org/apache/sling/scripting/resolver/internal/ScriptContextProvider.java b/src/main/java/org/apache/sling/scripting/resolver/internal/ScriptContextProvider.java
index a4ce659..e1c9767 100644
--- a/src/main/java/org/apache/sling/scripting/resolver/internal/ScriptContextProvider.java
+++ b/src/main/java/org/apache/sling/scripting/resolver/internal/ScriptContextProvider.java
@@ -18,17 +18,6 @@
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
 package org.apache.sling.scripting.resolver.internal;
 
-import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-import javax.script.Bindings;
-import javax.script.ScriptContext;
-import javax.script.ScriptEngine;
-import javax.script.SimpleBindings;
-
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.scripting.SlingBindings;
@@ -45,6 +34,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.script.Bindings;
+import javax.script.ScriptContext;
+import javax.script.ScriptEngine;
+import javax.script.SimpleBindings;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
 @Component(
         service = ScriptContextProvider.class
 )
diff --git a/src/test/java/org/apache/sling/junit/teleporter/customizers/ITCustomizer.java b/src/test/java/org/apache/sling/junit/teleporter/customizers/ITCustomizer.java
index 3bcd758..1ec4d79 100644
--- a/src/test/java/org/apache/sling/junit/teleporter/customizers/ITCustomizer.java
+++ b/src/test/java/org/apache/sling/junit/teleporter/customizers/ITCustomizer.java
@@ -17,8 +17,8 @@
 package org.apache.sling.junit.teleporter.customizers;
 
 import org.apache.sling.junit.rules.TeleporterRule;
-import org.apache.sling.testing.teleporter.client.ClientSideTeleporter;
 import org.apache.sling.testing.clients.util.TimeoutsProvider;
+import org.apache.sling.testing.teleporter.client.ClientSideTeleporter;
 
 public class ITCustomizer implements TeleporterRule.Customizer {
 
diff --git a/src/test/java/org/apache/sling/scripting/resolver/internal/BundledScriptTrackerIT.java b/src/test/java/org/apache/sling/scripting/resolver/internal/BundledScriptTrackerIT.java
index 1ee69b0..b99e939 100644
--- a/src/test/java/org/apache/sling/scripting/resolver/internal/BundledScriptTrackerIT.java
+++ b/src/test/java/org/apache/sling/scripting/resolver/internal/BundledScriptTrackerIT.java
@@ -32,5 +32,9 @@
     public void testSlingServletForResourceTypeProvided()
     {
         Assert.assertNotNull(teleporter.getService(Servlet.class, String.format("(%s=%s)", "sling.servlet.resourceTypes", "org.apache.sling.scripting.examplebundle.hello/1.0.0")));
+        Assert.assertNotNull(teleporter.getService(Servlet.class, String.format("(%s=%s)", "sling.servlet.resourceTypes", "org.apache.sling.scripting.examplebundle.hello/2.0.0")));
+        Assert.assertNotNull(teleporter.getService(Servlet.class, String.format("(%s=%s)", "sling.servlet.resourceTypes", "org.apache.sling.scripting.examplebundle.hello")));
+        Assert.assertNotNull(teleporter.getService(Servlet.class, String.format("(%s=%s)", "sling.servlet.resourceTypes", "org.apache.sling.scripting.examplebundle.hi")));
+        Assert.assertNotNull(teleporter.getService(Servlet.class, String.format("(%s=%s)", "sling.servlet.resourceTypes", "org.apache.sling.scripting.examplebundle.hi/1.0.0")));
     }
 }
diff --git a/src/test/java/org/apache/sling/scripting/resolver/internal/EndpointIT.java b/src/test/java/org/apache/sling/scripting/resolver/internal/EndpointIT.java
new file mode 100644
index 0000000..fa97646
--- /dev/null
+++ b/src/test/java/org/apache/sling/scripting/resolver/internal/EndpointIT.java
@@ -0,0 +1,119 @@
+/*
+ * 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.scripting.resolver.internal;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.io.IOException;
+
+import static org.apache.sling.junit.teleporter.customizers.ITCustomizer.BASE_URL_PROP;
+
+public class EndpointIT
+{
+    @Test
+    public void testHelloEndpoint() throws IOException, InterruptedException
+    {
+        Document document = get("content/srr/examples/example.html", 200);
+
+        Assert.assertEquals("We're testing some serious scripting here in Version 2", document.select("h2").html());
+        Assert.assertTrue(document.body().html().contains("World2"));
+        Assert.assertTrue(document.body().html().contains("Hello2"));
+    }
+
+    @Test
+    public void testHelloEndpointV1() throws IOException, InterruptedException
+    {
+        Document document = get("content/srr/examples/examplev1.html", 200);
+
+        Assert.assertEquals("We're testing some serious scripting here", document.select("h2").html());
+        Assert.assertTrue(document.body().html().contains("World"));
+        Assert.assertTrue(document.body().html().contains("Hello"));
+    }
+
+    @Test
+    public void testHelloEndpointV2() throws IOException, InterruptedException
+    {
+        Document document = get("content/srr/examples/examplev2.html", 200);
+
+        Assert.assertEquals("We're testing some serious scripting here in Version 2", document.select("h2").html());
+        Assert.assertTrue(document.body().html().contains("World2"));
+        Assert.assertTrue(document.body().html().contains("Hello2"));
+    }
+
+    @Test
+    public void testHiEndpoint() throws IOException, InterruptedException
+    {
+        Document document = get("content/srr/examples/examplehi.html", 200);
+
+        Assert.assertEquals("We're testing some serious scripting here", document.select("h2").html());
+        Assert.assertTrue(document.body().html().contains("World"));
+        Assert.assertTrue(document.body().html().contains("Hallo"));
+        Assert.assertFalse(document.body().html().contains("Hello"));
+    }
+
+    @Test
+    public void testHiEndpointV1() throws IOException, InterruptedException
+    {
+        Document document = get("content/srr/examples/examplehiv1.html", 200);
+
+        Assert.assertEquals("We're testing some serious scripting here", document.select("h2").html());
+        Assert.assertTrue(document.body().html().contains("World"));
+        Assert.assertTrue(document.body().html().contains("Hallo"));
+        Assert.assertFalse(document.body().html().contains("Hello"));
+    }
+
+    private Document get(String path, long expected) throws IOException, InterruptedException
+    {
+        HttpClient client = HttpClientBuilder.create().build();
+        HttpGet get = new HttpGet(System.getProperty(BASE_URL_PROP,  BASE_URL_PROP + "_IS_NOT_SET") + path);
+        RequestConfig requestConfig = RequestConfig.custom()
+            .setSocketTimeout(1000)
+            .setConnectTimeout(1000)
+            .setConnectionRequestTimeout(1000)
+            .build();
+        get.setConfig(requestConfig);
+        HttpResponse response = null;
+        for (int i = 0;i < 10;i++)
+        {
+            Thread.sleep(500);
+            try
+            {
+                response = client.execute(get);
+                if (response.getStatusLine().getStatusCode() == expected)
+                {
+                    break;
+                }
+            }
+            catch (Exception ex) {
+                ex.printStackTrace();
+            }
+            get = new HttpGet(System.getProperty(BASE_URL_PROP,  BASE_URL_PROP + "_IS_NOT_SET") + path);
+            get.setConfig(requestConfig);
+        }
+        Assert.assertNotNull(response);
+        Assert.assertEquals(expected, response.getStatusLine().getStatusCode());
+        return Jsoup.parse(response.getEntity().getContent(), "UTF-8", System.getProperty(BASE_URL_PROP,  BASE_URL_PROP + "_IS_NOT_SET"));
+    }
+}