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]>'].

Reply via email to