This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-servlets-resolver.git
The following commit(s) were added to refs/heads/master by this push:
new 22a6a92 SLING-7265 : NPE on activation of SlingServletResolver
22a6a92 is described below
commit 22a6a92f52a84e77c9269c4780cc347963620078
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Sat Nov 25 20:41:33 2017 +0100
SLING-7265 : NPE on activation of SlingServletResolver
---
.../resolver/internal/SlingServletResolver.java | 46 +++++++++++++++-------
1 file changed, 32 insertions(+), 14 deletions(-)
diff --git
a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
index 33a270c..4e1e6f4 100644
---
a/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
+++
b/src/main/java/org/apache/sling/servlets/resolver/internal/SlingServletResolver.java
@@ -89,6 +89,7 @@ import
org.apache.sling.servlets.resolver.internal.resource.ServletResourceProvi
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.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
@@ -1007,22 +1008,39 @@ public class SlingServletResolver
return false;
}
- final BundleContext bundleContext =
reference.getBundle().getBundleContext();
- final List<ServiceRegistration<ResourceProvider<Object>>> regs = new
ArrayList<>();
- for(final String root : provider.getServletPaths()) {
- @SuppressWarnings("unchecked")
- final ServiceRegistration<ResourceProvider<Object>> reg =
(ServiceRegistration<ResourceProvider<Object>>) bundleContext.registerService(
- ResourceProvider.class.getName(),
- provider,
- createServiceProperties(reference, provider, root));
- regs.add(reg);
- }
- if ( LOGGER.isDebugEnabled() ) {
- LOGGER.debug("Registered {}", provider);
+ boolean registered = false;
+ final Bundle bundle = reference.getBundle();
+ if ( bundle != null ) {
+ final BundleContext bundleContext = bundle.getBundleContext();
+ if ( bundleContext != null ) {
+ final List<ServiceRegistration<ResourceProvider<Object>>> regs
= new ArrayList<>();
+ try {
+ for(final String root : provider.getServletPaths()) {
+ @SuppressWarnings("unchecked")
+ final ServiceRegistration<ResourceProvider<Object>>
reg = (ServiceRegistration<ResourceProvider<Object>>)
bundleContext.registerService(
+ ResourceProvider.class.getName(),
+ provider,
+ createServiceProperties(reference, provider,
root));
+ regs.add(reg);
+ }
+ registered = true;
+ } catch ( final IllegalStateException ise ) {
+ // bundle context not valid anymore - ignore and continue
without this
+ }
+ if ( registered ) {
+ if ( LOGGER.isDebugEnabled() ) {
+ LOGGER.debug("Registered {}", provider);
+ }
+ synchronized (this.servletsByReference) {
+ servletsByReference.put(reference, new
ServletReg(servlet, regs));
+ }
+ }
+ }
}
- synchronized (this.servletsByReference) {
- servletsByReference.put(reference, new ServletReg(servlet, regs));
+ if ( !registered ) {
+ LOGGER.debug("bindServlet: servlet has been unregistered in the
meantime. Ignoring {}", name);
}
+
return true;
}
--
To stop receiving notification emails like this one, please contact
['"[email protected]" <[email protected]>'].