This is an automated email from the ASF dual-hosted git repository.

pauls pushed a commit to branch issues/SLING-9336
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-bundle-tracker.git

commit be3ad23646694f9af17697bc1243a6c11c945b6d
Author: Karl Pauls <[email protected]>
AuthorDate: Mon Apr 6 16:25:12 2020 +0200

    SLING-9336: filter servlet services with a hook.
---
 .../bundle/tracker/internal/BundledHooks.java      | 64 ++++++++++++++++++++++
 .../tracker/internal/BundledScriptTracker.java     |  2 +
 2 files changed, 66 insertions(+)

diff --git 
a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java
 
b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java
new file mode 100644
index 0000000..f3d968a
--- /dev/null
+++ 
b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledHooks.java
@@ -0,0 +1,64 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements.  See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership.  The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License.  You may obtain a copy of the License at
+ ~
+ ~   http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied.  See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+package org.apache.sling.scripting.bundle.tracker.internal;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceReference;
+import org.osgi.framework.hooks.service.EventListenerHook;
+import org.osgi.framework.hooks.service.FindHook;
+import org.osgi.framework.hooks.service.ListenerHook;
+import org.osgi.service.component.annotations.Component;
+
+@Component
+public class BundledHooks implements FindHook, EventListenerHook
+{
+    @Override
+    public void find(BundleContext context, String name, String filter, 
boolean allServices, Collection<ServiceReference<?>> references)
+    {
+        if 
(!context.getBundle().getSymbolicName().equals("org.apache.sling.servlets.resolver"))
+        {
+            for (Iterator<ServiceReference<?>> iter = references.iterator(); 
iter.hasNext();)
+            {
+                if (iter.next().getProperty(BundledHooks.class.getName()) != 
null)
+                {
+                    iter.remove();
+                }
+            }
+        }
+    }
+
+
+    @Override
+    public void event(ServiceEvent event, Map<BundleContext, 
Collection<ListenerHook.ListenerInfo>> listeners)
+    {
+        if 
(event.getServiceReference().getProperty(BundledHooks.class.getName()) != null)
+        {
+            for (Iterator<Map.Entry<BundleContext, 
Collection<ListenerHook.ListenerInfo>>> entries = 
listeners.entrySet().iterator(); entries.hasNext();) {
+                if 
(!entries.next().getKey().getBundle().getSymbolicName().equals("org.apache.sling.servlets.resolver"))
 {
+                    entries.remove();
+                }
+            }
+        }
+    }
+}
diff --git 
a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
 
b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
index 5d51820..df959d0 100644
--- 
a/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
+++ 
b/src/main/java/org/apache/sling/scripting/bundle/tracker/internal/BundledScriptTracker.java
@@ -182,6 +182,7 @@ public class BundledScriptTracker implements 
BundleTrackerCustomizer<List<Servic
                         if 
(executable.getPath().equals(servletCapability.getPath())) {
                             
properties.put(ServletResolverConstants.SLING_SERVLET_PATHS, 
executable.getPath());
                         }
+                        properties.put(BundledHooks.class.getName(), "true");
                         regs.add(
                                 bundle.getBundleContext().registerService(
                                         Servlet.class,
@@ -238,6 +239,7 @@ public class BundledScriptTracker implements 
BundleTrackerCustomizer<List<Servic
                         "=" + rt + "; " +
                         ServletResolverConstants.SLING_SERVLET_EXTENSIONS + 
"=" + extensions + "; " +
                         ServletResolverConstants.SLING_SERVLET_METHODS + "=" + 
methods  + "}");
+                properties.put(BundledHooks.class.getName(), "true");
                 reg = 
registeringBundle.orElse(m_context).registerService(Servlet.class, new 
DispatcherServlet(rt), properties);
             } else {
                 if (!new HashSet<>(Arrays.asList(PropertiesUtil

Reply via email to