You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/10/30 16:56:34 UTC
svn commit: r1711500 - in /sling/trunk/bundles/servlets/resolver: ./
src/main/java/org/apache/sling/servlets/resolver/internal/
src/main/java/org/apache/sling/servlets/resolver/internal/resource/
src/test/java/org/apache/sling/servlets/resolver/internal/
Author: cziegeler
Date: Fri Oct 30 15:56:33 2015
New Revision: 1711500
URL: http://svn.apache.org/viewvc?rev=1711500&view=rev
Log:
SLING-5222 : Migrate servlet resource provider to new provider api
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/resource/ServletResourceProvider.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=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/pom.xml (original)
+++ sling/trunk/bundles/servlets/resolver/pom.xml Fri Oct 30 15:56:33 2015
@@ -81,7 +81,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.api</artifactId>
- <version>2.4.0</version>
+ <version>2.9.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<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=1711500&r1=1711499&r2=1711500&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 Fri Oct 30 15:56:33 2015
@@ -71,7 +71,6 @@ import org.apache.sling.api.request.Slin
import org.apache.sling.api.request.SlingRequestListener;
import org.apache.sling.api.resource.LoginException;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceProvider;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ResourceUtil;
@@ -92,6 +91,7 @@ import org.apache.sling.servlets.resolve
import org.apache.sling.servlets.resolver.internal.resource.ServletResourceProvider;
import org.apache.sling.servlets.resolver.internal.resource.ServletResourceProviderFactory;
import org.apache.sling.servlets.resolver.jmx.SlingServletResolverCacheMBean;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
@@ -1000,24 +1000,27 @@ public class SlingServletResolver
return false;
}
- final ServiceRegistration reg = context.getBundleContext().registerService(
- ResourceProvider.SERVICE_NAME,
- provider,
- createServiceProperties(reference, provider));
-
+ final List<ServiceRegistration> regs = new ArrayList<ServiceRegistration>();
+ for(final String root : provider.getServletPaths()) {
+ final ServiceRegistration reg = context.getBundleContext().registerService(
+ ResourceProvider.class.getName(),
+ provider,
+ createServiceProperties(reference, provider, root));
+ regs.add(reg);
+ }
LOGGER.debug("Registered {}", provider.toString());
synchronized (this.servletsByReference) {
- servletsByReference.put(reference, new ServletReg(servlet, reg));
+ servletsByReference.put(reference, new ServletReg(servlet, regs));
}
-
return true;
}
private Dictionary<String, Object> createServiceProperties(final ServiceReference reference,
- final ServletResourceProvider provider) {
+ final ServletResourceProvider provider,
+ final String root) {
final Dictionary<String, Object> params = new Hashtable<String, Object>();
- params.put(ResourceProvider.ROOTS, provider.getServletPaths());
+ params.put(ResourceProvider.PROPERTY_ROOT, root);
params.put(Constants.SERVICE_DESCRIPTION,
"ServletResourceProvider for Servlets at " + Arrays.asList(provider.getServletPaths()));
@@ -1043,7 +1046,9 @@ public class SlingServletResolver
}
if (registration != null) {
- registration.registration.unregister();
+ for(final ServiceRegistration reg : registration.registrations) {
+ reg.unregister();
+ }
final String name = RequestUtil.getServletName(registration.servlet);
LOGGER.debug("unbindServlet: Servlet {} removed", name);
@@ -1129,11 +1134,11 @@ public class SlingServletResolver
private static final class ServletReg {
public final Servlet servlet;
- public final ServiceRegistration registration;
+ public final List<ServiceRegistration> registrations;
- public ServletReg(final Servlet s, final ServiceRegistration sr) {
+ public ServletReg(final Servlet s, final List<ServiceRegistration> srs) {
this.servlet = s;
- this.registration = sr;
+ this.registrations = srs;
}
}
Modified: sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java?rev=1711500&r1=1711499&r2=1711500&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java (original)
+++ sling/trunk/bundles/servlets/resolver/src/main/java/org/apache/sling/servlets/resolver/internal/resource/ServletResourceProvider.java Fri Oct 30 15:56:33 2015
@@ -24,24 +24,27 @@ import java.util.NoSuchElementException;
import java.util.Set;
import javax.servlet.Servlet;
-import javax.servlet.http.HttpServletRequest;
import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceProvider;
-import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.spi.resource.provider.ResolverContext;
+import org.apache.sling.spi.resource.provider.ResourceContext;
+import org.apache.sling.spi.resource.provider.ResourceProvider;
-public class ServletResourceProvider implements ResourceProvider {
+public class ServletResourceProvider extends ResourceProvider<Object> {
private static final Iterator<Resource> EMPTY_ITERATOR = new Iterator<Resource>() {
+ @Override
public boolean hasNext() {
return false;
}
+ @Override
public Resource next() {
throw new NoSuchElementException();
}
+ @Override
public void remove() {
throw new UnsupportedOperationException();
}
@@ -59,22 +62,19 @@ public class ServletResourceProvider imp
this.servlet = servlet;
}
- public Resource getResource(ResourceResolver resourceResolver,
- HttpServletRequest request, String path) {
- return getResource(resourceResolver, path);
- }
-
- public Resource getResource(ResourceResolver resourceResolver, String path) {
+ @Override
+ public Resource getResource(final ResolverContext<Object> ctx, String path, ResourceContext resourceContext, Resource parent) {
// only return a resource if the servlet has been assigned
if (servlet != null && resourcePaths.contains(path)) {
- return new ServletResource(resourceResolver, servlet, path);
+ return new ServletResource(ctx.getResourceResolver(), servlet, path);
}
return null;
}
- public Iterator<Resource> listChildren(final Resource parent) {
- return EMPTY_ITERATOR;
+ @Override
+ public Iterator<Resource> listChildren(ResolverContext<Object> ctx, Resource parent) {
+ return null;
}
Servlet getServlet() {
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=1711500&r1=1711499&r2=1711500&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 Fri Oct 30 15:56:33 2015
@@ -95,6 +95,7 @@ public class SlingServletResolverTest {
throw new LoginException("MockResourceResolver can't be cloned - excepted for this test!");
}
+ @Override
public void refresh() {
// nothing to do
}
@@ -103,17 +104,32 @@ public class SlingServletResolverTest {
final ResourceResolverFactory factory = new ResourceResolverFactory() {
+ @Override
public ResourceResolver getAdministrativeResourceResolver(
Map<String, Object> authenticationInfo)
throws LoginException {
return mockResourceResolver;
}
+ @Override
public ResourceResolver getResourceResolver(
Map<String, Object> authenticationInfo)
throws LoginException {
return mockResourceResolver;
}
+
+ @Override
+ public ResourceResolver getServiceResourceResolver(Map<String, Object> authenticationInfo)
+ throws LoginException {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public ResourceResolver getThreadResourceResolver() {
+ // TODO Auto-generated method stub
+ return null;
+ }
};
servlet = new MockSlingRequestHandlerServlet();
@@ -212,13 +228,13 @@ public class SlingServletResolverTest {
ServletResourceProvider servlet = factory.create(msr);
- Method createServiceProperties = SlingServletResolver.class.getDeclaredMethod("createServiceProperties", ServiceReference.class, ServletResourceProvider.class);
+ Method createServiceProperties = SlingServletResolver.class.getDeclaredMethod("createServiceProperties", ServiceReference.class, ServletResourceProvider.class, String.class);
createServiceProperties.setAccessible(true);
// no ranking
assertNull(msr.getProperty(Constants.SERVICE_RANKING));
@SuppressWarnings("unchecked")
- final Dictionary<String, Object> p1 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+ final Dictionary<String, Object> p1 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
assertNull(p1.get(Constants.SERVICE_RANKING));
// illegal type of ranking
@@ -226,7 +242,7 @@ public class SlingServletResolverTest {
msr.setProperty(Constants.SERVICE_RANKING, nonIntValue);
assertEquals(nonIntValue, msr.getProperty(Constants.SERVICE_RANKING));
@SuppressWarnings("unchecked")
- final Dictionary<String, Object> p2 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+ final Dictionary<String, Object> p2 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
assertNull(p2.get(Constants.SERVICE_RANKING));
// illegal type of ranking
@@ -234,7 +250,7 @@ public class SlingServletResolverTest {
msr.setProperty(Constants.SERVICE_RANKING, intValue);
assertEquals(intValue, msr.getProperty(Constants.SERVICE_RANKING));
@SuppressWarnings("unchecked")
- final Dictionary<String, Object> p3 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet);
+ final Dictionary<String, Object> p3 = (Dictionary<String, Object>) createServiceProperties.invoke(servletResolver, msr, servlet, "/a");
assertEquals(intValue, p3.get(Constants.SERVICE_RANKING));
}
@@ -247,6 +263,7 @@ public class SlingServletResolverTest {
private static class MockSlingRequestHandlerServlet extends HttpServlet
implements OptingServlet {
+ @Override
public boolean accepts(SlingHttpServletRequest request) {
return request.isSecure();
}