Author: cziegeler
Date: Mon Mar 27 09:21:28 2017
New Revision: 1788859

URL: http://svn.apache.org/viewvc?rev=1788859&view=rev
Log:
SLING-6716 : Migrate to R6 annotations, clean up dependencies

Modified:
    sling/trunk/bundles/servlets/resolver/pom.xml
    
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
    
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
    
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
    
sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java

Modified: sling/trunk/bundles/servlets/resolver/pom.xml
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/pom.xml?rev=1788859&r1=1788858&r2=1788859&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/pom.xml (original)
+++ sling/trunk/bundles/servlets/resolver/pom.xml Mon Mar 27 09:21:28 2017
@@ -50,10 +50,6 @@
         <plugins>
             <plugin>
                 <groupId>org.apache.felix</groupId>
-                <artifactId>maven-scr-plugin</artifactId>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.felix</groupId>
                 <artifactId>maven-bundle-plugin</artifactId>
                 <extensions>true</extensions>
                 <configuration>
@@ -134,11 +130,6 @@
             <artifactId>osgi.core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.felix</groupId>
-            <artifactId>org.apache.felix.scr.annotations</artifactId>
-            <scope>provided</scope>
-        </dependency>
-        <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
         </dependency>

Modified: 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java?rev=1788859&r1=1788858&r2=1788859&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
 (original)
+++ 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
 Mon Mar 27 09:21:28 2017
@@ -52,14 +52,6 @@ import javax.servlet.http.HttpServletReq
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.felix.scr.annotations.Activate;
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.PropertyUnbounded;
-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.SlingException;
 import org.apache.sling.api.SlingHttpServletRequest;
@@ -82,7 +74,6 @@ import org.apache.sling.api.scripting.Sl
 import org.apache.sling.api.scripting.SlingScriptResolver;
 import org.apache.sling.api.servlets.OptingServlet;
 import org.apache.sling.api.servlets.ServletResolver;
-import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.apache.sling.engine.ResponseUtil;
 import org.apache.sling.engine.servlets.ErrorHandler;
 import 
org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet;
@@ -100,8 +91,16 @@ 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.Activate;
+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.EventHandler;
+import org.osgi.service.metatype.annotations.AttributeDefinition;
+import org.osgi.service.metatype.annotations.Designate;
+import org.osgi.service.metatype.annotations.ObjectClassDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -113,10 +112,13 @@ import org.slf4j.LoggerFactory;
  * The resolver uses an own session to find the scripts.
  *
  */
-@Component(name = "org.apache.sling.servlets.resolver.SlingServletResolver", 
metatype = true, label = "%servletresolver.name", description = 
"%servletresolver.description")
-@Service(value = { ServletResolver.class, SlingScriptResolver.class, 
ErrorHandler.class, SlingRequestListener.class })
-@Property(name = Constants.SERVICE_DESCRIPTION, value = "Apache Sling Servlet 
Resolver and Error Handler")
-@Reference(name = "Servlet", referenceInterface = javax.servlet.Servlet.class, 
cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = 
ReferencePolicy.DYNAMIC)
+@Component(name = "org.apache.sling.servlets.resolver.SlingServletResolver",
+           service = { ServletResolver.class, SlingScriptResolver.class, 
ErrorHandler.class, SlingRequestListener.class },
+           property = {
+                   Constants.SERVICE_DESCRIPTION + "=Apache Sling Servlet 
Resolver and Error Handler",
+                   Constants.SERVICE_VENDOR + "=The Apache Software Foundation"
+           })
+@Designate(ocd = SlingServletResolver.Config.class)
 public class SlingServletResolver
     implements ServletResolver,
                SlingScriptResolver,
@@ -125,35 +127,51 @@ public class SlingServletResolver
                EventHandler,
                ResourceChangeListener,ExternalResourceChangeListener {
 
-    /**
-     * The default servlet root is the first search path (which is usally 
/apps)
-     */
-    public static final String DEFAULT_SERVLET_ROOT = "0";
-
-    /** The default cache size for the script resolution. */
-    public static final int DEFAULT_CACHE_SIZE = 200;
+    @ObjectClassDefinition(name = "Apache Sling Servlet/Script Resolver and 
Error Handler",
+            description= "The Sling Servlet and Script Resolver has "+
+                 "multiple tasks: One it is used as the ServletResolver to 
select the Servlet "+
+                 "or Script to call to handle the request. Second it acts as 
the "+
+                 "SlingScriptResolver and finally it manages error handling by 
implementing "+
+                 "the ErrorHandler interface using the same algorithm to 
select error handling "+
+                 "servlets and scripts as is used to resolve request 
processing servlets and "+
+                 "scripts.")
+    public @interface Config {
+        /**
+         * The default servlet root is the first search path (which is usually 
/apps)
+         */
+        @AttributeDefinition(name="Servlet Registration Root Path",
+                description = "The default root path assumed when "+
+                     "registering a servlet whose servlet registration 
properties define a relative "+
+                     "resource type/path. It can either be a string starting 
with \"/\" (specifying a path prefix to be used) "+
+                     "or a number which specifies the resource resolver's 
search path entry index. The default value "+
+                     "is 0 (usually stands for \"/apps\" in the search paths). 
The number can be -1 which always "+
+                     "points to the last search path entry.")
+        String servletresolver_servletRoot() default "0";
+
+        /** The default cache size for the script resolution. */
+        @AttributeDefinition(name = "Cache Size",
+                description = "This property configures the size of the " +
+                    "cache used for script resolution. A value lower than 5 
disables the cache.")
+        int servletresolver_cacheSize() default 200;
+
+        @AttributeDefinition(name = "Execution Paths",
+                description = "The paths to search for executable scripts. If 
no path is configured " +
+                     "this is treated like the default (/ = root) which allows 
to execute all scripts. By configuring some " +
+                     "paths the execution of scripts can be limited. If a 
configured value ends with a slash, the whole sub tree " +
+                     "is allowed. Without a slash an exact matching script is 
allowed.")
+        String[] servletresolver_paths() default "/";
+
+        @AttributeDefinition(name = "Default Extensions",
+                description = "The list of extensions for which the default 
behavior " +
+                    "will be used. This means that the last path segment of 
the resource type can be used as the script name.")
+        String[] servletresolver_defaultExtensions() default "html";
+    }
 
     /** Servlet resolver logger */
     public static final Logger LOGGER = 
LoggerFactory.getLogger(SlingServletResolver.class);
 
-    @Property(value=DEFAULT_SERVLET_ROOT)
-    public static final String PROP_SERVLET_ROOT = 
"servletresolver.servletRoot";
-
-    @Property(intValue=DEFAULT_CACHE_SIZE)
-    public static final String PROP_CACHE_SIZE = "servletresolver.cacheSize";
-
     private static final String REF_SERVLET = "Servlet";
 
-    @Property(value="/", unbounded=PropertyUnbounded.ARRAY)
-    public static final String PROP_PATHS = "servletresolver.paths";
-
-    private static final String[] DEFAULT_PATHS = new String[] {"/"};
-
-    @Property(value="html", unbounded=PropertyUnbounded.ARRAY)
-    public static final String PROP_DEFAULT_EXTENSIONS = 
"servletresolver.defaultExtensions";
-
-    private static final String[] DEFAULT_DEFAULT_EXTENSIONS = new String[] 
{"html"};
-
     @Reference(target="(name=org.apache.sling)")
     private ServletContext servletContext;
 
@@ -162,9 +180,9 @@ public class SlingServletResolver
 
     private ResourceResolver sharedScriptResolver;
 
-    private final Map<ServiceReference, ServletReg> servletsByReference = new 
HashMap<ServiceReference, ServletReg>();
+    private final Map<ServiceReference<Servlet>, ServletReg> 
servletsByReference = new HashMap<>();
 
-    private final List<ServiceReference> pendingServlets = new 
ArrayList<ServiceReference>();
+    private final List<ServiceReference<Servlet>> pendingServlets = new 
ArrayList<>();
 
     /** The component context. */
     private ComponentContext context;
@@ -189,7 +207,7 @@ public class SlingServletResolver
     private volatile boolean logCacheSizeWarning;
 
     /** Registration as event handler. */
-    private ServiceRegistration eventHandlerReg;
+    private ServiceRegistration<?> eventHandlerReg;
 
     /**
      * The allowed execution paths.
@@ -509,9 +527,9 @@ public class SlingServletResolver
         return scriptResolver;
     }
 
-    private final ThreadLocal<ResourceResolver> perThreadScriptResolver = new 
ThreadLocal<ResourceResolver>();
+    private final ThreadLocal<ResourceResolver> perThreadScriptResolver = new 
ThreadLocal<>();
 
-    private ServiceRegistration mbeanRegistration;
+    private ServiceRegistration<SlingServletResolverCacheMBean> 
mbeanRegistration;
 
     /**
      * @see 
org.apache.sling.api.request.SlingRequestListener#onEvent(org.apache.sling.api.request.SlingRequestEvent)
@@ -774,24 +792,17 @@ public class SlingServletResolver
      * Activate this component.
      */
     @Activate
-    protected void activate(final ComponentContext context) throws 
LoginException {
-        // from configuration if available
-        final Dictionary<?, ?> properties = context.getProperties();
-        Object servletRoot = properties.get(PROP_SERVLET_ROOT);
-        if (servletRoot == null) {
-            servletRoot = DEFAULT_SERVLET_ROOT;
-        }
-
-        final Collection<ServiceReference> refs;
+    protected void activate(final ComponentContext context, final Config 
config) throws LoginException {
+        final Collection<ServiceReference<Servlet>> refs;
         synchronized (this.pendingServlets) {
 
-            refs = new ArrayList<ServiceReference>(pendingServlets);
+            refs = new ArrayList<>(pendingServlets);
             pendingServlets.clear();
 
             this.sharedScriptResolver =
                     
resourceResolverFactory.getServiceResourceResolver(Collections.singletonMap(ResourceResolverFactory.SUBSERVICE,
 (Object)"scripts"));
             this.searchPaths = this.sharedScriptResolver.getSearchPath();
-            servletResourceProviderFactory = new 
ServletResourceProviderFactory(servletRoot, this.searchPaths);
+            servletResourceProviderFactory = new 
ServletResourceProviderFactory(config.servletresolver_servletRoot(), 
this.searchPaths);
 
             // register servlets immediately from now on
             this.context = context;
@@ -799,7 +810,7 @@ public class SlingServletResolver
         createAllServlets(refs);
 
         // execution paths
-        this.executionPaths = 
PropertiesUtil.toStringArray(properties.get(PROP_PATHS), DEFAULT_PATHS);
+        this.executionPaths = config.servletresolver_paths();
         if ( this.executionPaths != null ) {
             // if we find a string combination that basically allows all paths,
             // we simply set the array to null
@@ -819,12 +830,12 @@ public class SlingServletResolver
                 }
             }
         }
-        this.defaultExtensions = 
PropertiesUtil.toStringArray(properties.get(PROP_DEFAULT_EXTENSIONS), 
DEFAULT_DEFAULT_EXTENSIONS);
+        this.defaultExtensions = config.servletresolver_defaultExtensions();
 
         // create cache - if a cache size is configured
-        this.cacheSize = 
PropertiesUtil.toInteger(properties.get(PROP_CACHE_SIZE), DEFAULT_CACHE_SIZE);
+        this.cacheSize = config.servletresolver_cacheSize();
         if (this.cacheSize > 5) {
-            this.cache = new ConcurrentHashMap<AbstractResourceCollector, 
Servlet>(cacheSize);
+            this.cache = new ConcurrentHashMap<>(cacheSize);
             this.logCacheSizeWarning = true;
         } else {
             this.cacheSize = 0;
@@ -835,7 +846,7 @@ public class SlingServletResolver
 
         // and finally register as event listener
 
-               final Dictionary<String, Object> props = new Hashtable<String, 
Object>();
+               final Dictionary<String, Object> props = new Hashtable<>();
         props.put("event.topics", new String[] 
{"javax/script/ScriptEngineFactory/*",
             
"org/apache/sling/api/adapter/AdapterFactory/*","org/apache/sling/scripting/core/BindingsValuesProvider/*"
 });
         props.put(ResourceChangeListener.PATHS, "/");
@@ -849,11 +860,11 @@ public class SlingServletResolver
         this.plugin = new 
ServletResolverWebConsolePlugin(context.getBundleContext());
         if (this.cacheSize > 0) {
             try {
-                Dictionary<String, String> mbeanProps = new Hashtable<String, 
String>();
+                Dictionary<String, String> mbeanProps = new Hashtable<>();
                 mbeanProps.put("jmx.objectname", 
"org.apache.sling:type=servletResolver,service=SlingServletResolverCache");
 
                 ServletResolverCacheMBeanImpl mbean = new 
ServletResolverCacheMBeanImpl();
-                mbeanRegistration = 
context.getBundleContext().registerService(SlingServletResolverCacheMBean.class.getName(),
 mbean, mbeanProps);
+                mbeanRegistration = 
context.getBundleContext().registerService(SlingServletResolverCacheMBean.class,
 mbean, mbeanProps);
             } catch (Throwable t) {
                 LOGGER.debug("Unable to register mbean");
             }
@@ -879,9 +890,9 @@ public class SlingServletResolver
 
         // Copy the list of servlets first, to minimize the need for
         // synchronization
-        final Collection<ServiceReference> refs;
+        final Collection<ServiceReference<Servlet>> refs;
         synchronized (this.servletsByReference) {
-            refs = new 
ArrayList<ServiceReference>(servletsByReference.keySet());
+            refs = new ArrayList<>(servletsByReference.keySet());
         }
         // destroy all servlets
         destroyAllServlets(refs);
@@ -916,7 +927,12 @@ public class SlingServletResolver
         }
     }
 
-    protected void bindServlet(final ServiceReference reference) {
+    @Reference(
+            name = REF_SERVLET,
+            service = javax.servlet.Servlet.class,
+            cardinality = ReferenceCardinality.MULTIPLE,
+            policy = ReferencePolicy.DYNAMIC)
+    protected void bindServlet(final ServiceReference<Servlet> reference) {
         boolean directCreate = true;
         if (context == null) {
             synchronized ( pendingServlets ) {
@@ -931,7 +947,7 @@ public class SlingServletResolver
         }
     }
 
-    protected void unbindServlet(final ServiceReference reference) {
+    protected void unbindServlet(final ServiceReference<Servlet> reference) {
         synchronized ( pendingServlets ) {
             pendingServlets.remove(reference);
         }
@@ -940,13 +956,13 @@ public class SlingServletResolver
 
     // ---------- Servlet Management 
-------------------------------------------
 
-    private void createAllServlets(final Collection<ServiceReference> 
pendingServlets) {
-        for (final ServiceReference serviceReference : pendingServlets) {
+    private void createAllServlets(final Collection<ServiceReference<Servlet>> 
pendingServlets) {
+        for (final ServiceReference<Servlet> serviceReference : 
pendingServlets) {
             createServlet(serviceReference);
         }
     }
 
-    private boolean createServlet(final ServiceReference reference) {
+    private boolean createServlet(final ServiceReference<Servlet> reference) {
 
         // check for a name, this is required
         final String name = getName(reference);
@@ -965,7 +981,7 @@ public class SlingServletResolver
         // only now try to access the servlet service, this may still fail
         Servlet servlet = null;
         try {
-            servlet = (Servlet) context.locateService(REF_SERVLET, reference);
+            servlet = context.locateService(REF_SERVLET, reference);
         } catch (Throwable t) {
             LOGGER.warn("bindServlet: Failed getting the service for reference 
" + reference, t);
         }
@@ -989,9 +1005,10 @@ public class SlingServletResolver
             return false;
         }
 
-        final List<ServiceRegistration> regs = new 
ArrayList<ServiceRegistration>();
+        final List<ServiceRegistration<ResourceProvider<Object>>> regs = new 
ArrayList<>();
         for(final String root : provider.getServletPaths()) {
-            final ServiceRegistration reg = 
context.getBundleContext().registerService(
+            @SuppressWarnings("unchecked")
+            final ServiceRegistration<ResourceProvider<Object>> reg = 
(ServiceRegistration<ResourceProvider<Object>>) 
context.getBundleContext().registerService(
                 ResourceProvider.class.getName(),
                 provider,
                 createServiceProperties(reference, provider, root));
@@ -1004,11 +1021,11 @@ public class SlingServletResolver
         return true;
     }
 
-    private Dictionary<String, Object> createServiceProperties(final 
ServiceReference reference,
+    private Dictionary<String, Object> createServiceProperties(final 
ServiceReference<Servlet> reference,
             final ServletResourceProvider provider,
             final String root) {
 
-        final Dictionary<String, Object> params = new Hashtable<String, 
Object>();
+        final Dictionary<String, Object> params = new Hashtable<>();
         params.put(ResourceProvider.PROPERTY_ROOT, root);
         params.put(Constants.SERVICE_DESCRIPTION,
             "ServletResourceProvider for Servlets at " + 
Arrays.asList(provider.getServletPaths()));
@@ -1022,20 +1039,20 @@ public class SlingServletResolver
         return params;
     }
 
-    private void destroyAllServlets(final Collection<ServiceReference> refs) {
-        for (ServiceReference serviceReference : refs) {
+    private void destroyAllServlets(final 
Collection<ServiceReference<Servlet>> refs) {
+        for (ServiceReference<Servlet> serviceReference : refs) {
             destroyServlet(serviceReference);
         }
     }
 
-    private void destroyServlet(final ServiceReference reference) {
+    private void destroyServlet(final ServiceReference<Servlet> reference) {
         ServletReg registration;
         synchronized (this.servletsByReference) {
             registration = servletsByReference.remove(reference);
         }
         if (registration != null) {
 
-            for(final ServiceRegistration reg : registration.registrations) {
+            for(final ServiceRegistration<ResourceProvider<Object>> reg : 
registration.registrations) {
                 reg.unregister();
             }
             final String name = 
RequestUtil.getServletName(registration.servlet);
@@ -1089,7 +1106,7 @@ public class SlingServletResolver
      * class comment at the top for the list of properties checked by this
      * method.
      */
-    private static String getName(final ServiceReference reference) {
+    private static String getName(final ServiceReference<Servlet> reference) {
         String servletName = null;
         for (int i = 0; i < NAME_PROPERTIES.length
             && (servletName == null || servletName.length() == 0); i++) {
@@ -1107,9 +1124,9 @@ public class SlingServletResolver
 
     private static final class ServletReg {
         public final Servlet servlet;
-        public final List<ServiceRegistration> registrations;
+        public final List<ServiceRegistration<ResourceProvider<Object>>> 
registrations;
 
-        public ServletReg(final Servlet s, final List<ServiceRegistration> 
srs) {
+        public ServletReg(final Servlet s, final 
List<ServiceRegistration<ResourceProvider<Object>>> srs) {
             this.servlet = s;
             this.registrations = srs;
         }
@@ -1120,10 +1137,10 @@ public class SlingServletResolver
         private static final String PARAMETER_URL = "url";
         private static final String PARAMETER_METHOD = "method";
 
-        private ServiceRegistration service;
+        private ServiceRegistration<Servlet> service;
 
         public ServletResolverWebConsolePlugin(final BundleContext context) {
-            Dictionary<String, Object> props = new Hashtable<String, Object>();
+            Dictionary<String, Object> props = new Hashtable<>();
             props.put(Constants.SERVICE_DESCRIPTION,
                     "Sling Servlet Resolver Web Console Plugin");
             props.put(Constants.SERVICE_VENDOR, "The Apache Software 
Foundation");
@@ -1133,8 +1150,7 @@ public class SlingServletResolver
             props.put("felix.webconsole.css", 
"/servletresolver/res/ui/styles.css");
             props.put("felix.webconsole.category", "Sling");
 
-            service = context.registerService(
-                    new String[] { "javax.servlet.Servlet" }, this, props);
+            service = context.registerService(Servlet.class, this, props);
         }
 
         public void dispose() {

Modified: 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java?rev=1788859&r1=1788858&r2=1788859&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
 (original)
+++ 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/defaults/DefaultErrorHandlerServlet.java
 Mon Mar 27 09:21:28 2017
@@ -22,35 +22,34 @@ import java.io.IOException;
 import java.io.PrintWriter;
 
 import javax.servlet.GenericServlet;
+import javax.servlet.Servlet;
 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.felix.scr.annotations.Component;
-import org.apache.felix.scr.annotations.Properties;
-import org.apache.felix.scr.annotations.Property;
-import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.request.RequestProgressTracker;
 import org.apache.sling.api.request.ResponseUtil;
+import org.osgi.framework.Constants;
+import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * The <code>DefaultErrorHandlerServlet</code> TODO
+ * The <code>DefaultErrorHandlerServlet</code>
  *
  * This is the default error handler servlet registered at the end of the
  * global search path
  */
-@Component
-@Service(value=javax.servlet.Servlet.class)
-@Properties({
-    @Property(name="sling.servlet.paths", 
value="sling/servlet/errorhandler/default"),
-    @Property(name="sling.servlet.prefix", value="-1")
-})
 @SuppressWarnings("serial")
+@Component(service = Servlet.class,
+    property = {
+            Constants.SERVICE_VENDOR + "=The Apache Software Foundation",
+            "sling.servlet.paths=sling/servlet/errorhandler/default",
+            "sling.servlet.prefix=-1"
+    })
 public class DefaultErrorHandlerServlet extends GenericServlet {
 
     /** default log */

Modified: 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java?rev=1788859&r1=1788858&r2=1788859&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
 (original)
+++ 
sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProviderFactory.java
 Mon Mar 27 09:21:28 2017
@@ -28,9 +28,11 @@ import static org.apache.sling.servlets.
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.servlet.Servlet;
+
 import org.apache.sling.api.resource.ResourceUtil;
 import org.apache.sling.api.servlets.HttpConstants;
-import org.apache.sling.commons.osgi.OsgiUtil;
+import org.apache.sling.commons.osgi.PropertiesUtil;
 import org.osgi.framework.Constants;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.component.ComponentConstants;
@@ -116,9 +118,9 @@ public class ServletResourceProviderFact
         }
     }
 
-    public ServletResourceProvider create(ServiceReference ref) {
+    public ServletResourceProvider create(ServiceReference<Servlet> ref) {
 
-        Set<String> pathSet = new HashSet<String>();
+        Set<String> pathSet = new HashSet<>();
 
         // check whether explicit paths are set
         addByPath(pathSet, ref);
@@ -146,7 +148,7 @@ public class ServletResourceProviderFact
     /**
      * Get the mount prefix.
      */
-    private String getPrefix(final ServiceReference ref) {
+    private String getPrefix(final ServiceReference<Servlet> ref) {
         Object value = ref.getProperty(SLING_SERVLET_PREFIX);
         if ( value == null ) {
             if ( this.servletRoot != null ) {
@@ -192,8 +194,8 @@ public class ServletResourceProviderFact
      * @param pathSet
      * @param ref
      */
-    private void addByPath(Set<String> pathSet, ServiceReference ref) {
-        String[] paths = 
OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_PATHS));
+    private void addByPath(Set<String> pathSet, ServiceReference<Servlet> ref) 
{
+        String[] paths = 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_PATHS));
         if (paths != null && paths.length > 0) {
             for (String path : paths) {
                 if (!path.startsWith("/")) {
@@ -214,8 +216,8 @@ public class ServletResourceProviderFact
      * @param pathSet
      * @param ref
      */
-    private void addByType(Set<String> pathSet, ServiceReference ref) {
-        String[] types = 
OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_RESOURCE_TYPES));
+    private void addByType(Set<String> pathSet, ServiceReference<Servlet> ref) 
{
+        String[] types = 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_RESOURCE_TYPES));
         if (types == null || types.length == 0) {
             if (log.isDebugEnabled()) {
                 log.debug("addByType({}): no resource types declared",
@@ -225,16 +227,16 @@ public class ServletResourceProviderFact
         }
 
         // check for selectors
-        String[] selectors = 
OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_SELECTORS));
+        String[] selectors = 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_SELECTORS));
         if (selectors == null) {
             selectors = new String[] { null };
         }
 
         // we have types and expect extensions and/or methods
-        String[] extensions = 
OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_EXTENSIONS));
+        String[] extensions = 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_EXTENSIONS));
 
         // handle the methods property specially (SLING-430)
-        String[] methods = 
OsgiUtil.toStringArray(ref.getProperty(SLING_SERVLET_METHODS));
+        String[] methods = 
PropertiesUtil.toStringArray(ref.getProperty(SLING_SERVLET_METHODS));
         if (methods == null || methods.length == 0) {
 
             // SLING-512 only, set default methods if no extensions are 
declared
@@ -313,7 +315,7 @@ public class ServletResourceProviderFact
         }
     }
 
-    private String getServiceIdentifier(ServiceReference ref) {
+    private String getServiceIdentifier(ServiceReference<Servlet> ref) {
         Object id = ref.getProperty(ComponentConstants.COMPONENT_NAME);
         if (id != null) {
             return id.toString();

Modified: 
sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java?rev=1788859&r1=1788858&r2=1788859&view=diff
==============================================================================
--- 
sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
 (original)
+++ 
sling/trunk/bundles/servlets/resolver/src/test/java/org/apache/sling/servlets/resolver/internal/SlingServletResolverTest.java
 Mon Mar 27 09:21:28 2017
@@ -23,6 +23,7 @@ import static junit.framework.TestCase.a
 import static 
org.apache.sling.servlets.resolver.internal.ServletResolverConstants.SLING_SERLVET_NAME;
 import static org.junit.Assert.assertEquals;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
@@ -166,10 +167,35 @@ public class SlingServletResolverTest {
             SERVLET_EXTENSION);
         mockComponentContext.locateService(SERVLET_NAME, serviceReference);
 
-        configureComponentContext(mockComponentContext);
-
         servletResolver.bindServlet(serviceReference);
-        servletResolver.activate(mockComponentContext);
+        servletResolver.activate(mockComponentContext, new 
SlingServletResolver.Config() {
+
+            @Override
+            public Class<? extends Annotation> annotationType() {
+                return SlingServletResolver.Config.class;
+            }
+
+            @Override
+            public String servletresolver_servletRoot() {
+                return "0";
+            }
+
+            @Override
+            public String[] servletresolver_paths() {
+                return new String[] {"/"};
+            }
+
+            @Override
+            public String[] servletresolver_defaultExtensions() {
+                // TODO Auto-generated method stub
+                return new String[] {"html"};
+            }
+
+            @Override
+            public int servletresolver_cacheSize() {
+                return 200;
+            }
+        });
 
         String path = "/"
             + MockSlingHttpServletRequest.RESOURCE_TYPE
@@ -184,7 +210,7 @@ public class SlingServletResolverTest {
             ResourceUtil.getParent(res.getPath()), "nt:folder");
         mockResourceResolver.addResource(parent);
 
-        List<Resource> childRes = new ArrayList<Resource>();
+        List<Resource> childRes = new ArrayList<>();
         childRes.add(res);
         mockResourceResolver.addChildren(parent, childRes);
     }
@@ -193,9 +219,6 @@ public class SlingServletResolverTest {
         return "fromRequest";
     }
 
-    protected void configureComponentContext(MockComponentContext 
mockComponentContext) {
-    }
-
     @Test public void testAcceptsRequest() {
         MockSlingHttpServletRequest secureRequest = new 
MockSlingHttpServletRequest(
             SERVLET_PATH, null, SERVLET_EXTENSION, null, null);


Reply via email to