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);