You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2020/04/14 15:06:42 UTC
[sling-org-apache-sling-scripting-bundle-tracker] branch master
updated: SLING-9366 - Do not expose all the required wires to the
BundledScriptServlet
This is an automated email from the ASF dual-hosted git repository.
radu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-bundle-tracker.git
The following commit(s) were added to refs/heads/master by this push:
new c187478 SLING-9366 - Do not expose all the required wires to the BundledScriptServlet
c187478 is described below
commit c187478006139eb6fd1b4ac9c2c98848f9c00b42
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Tue Apr 14 16:08:22 2020 +0200
SLING-9366 - Do not expose all the required wires to the BundledScriptServlet
---
.../tracker/internal/BundledScriptTracker.java | 29 ++++++++++++++--------
1 file changed, 18 insertions(+), 11 deletions(-)
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 0401053..a3d6048 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
@@ -21,6 +21,7 @@ package org.apache.sling.scripting.bundle.tracker.internal;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -30,6 +31,7 @@ import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -121,6 +123,7 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
.anyMatch(m_context.getBundle()::equals)) {
LOGGER.debug("Inspecting bundle {} for {} capability.", bundle.getSymbolicName(), NS_SLING_SERVLET);
List<BundleCapability> capabilities = bundleWiring.getCapabilities(NS_SLING_SERVLET);
+ Set<TypeProvider> requiresChain = collectRequiresChain(bundleWiring);
if (!capabilities.isEmpty()) {
List<ServiceRegistration<Servlet>> serviceRegistrations = capabilities.stream().flatMap(cap ->
{
@@ -130,8 +133,8 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
BundledRenderUnitCapability bundledRenderUnitCapability = BundledRenderUnitCapabilityImpl.fromBundleCapability(cap);
Executable executable = null;
TypeProvider baseTypeProvider = new TypeProviderImpl(bundledRenderUnitCapability, bundle);
- LinkedHashSet<TypeProvider> wiredProviders = new LinkedHashSet<>();
- wiredProviders.add(baseTypeProvider);
+ LinkedHashSet<TypeProvider> inheritanceChain = new LinkedHashSet<>();
+ inheritanceChain.add(baseTypeProvider);
if (!bundledRenderUnitCapability.getResourceTypes().isEmpty()) {
String[] resourceTypesRegistrationValue = new String[bundledRenderUnitCapability.getResourceTypes().size()];
int rtIndex = 0;
@@ -156,8 +159,8 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
String extendedResourceTypeString = bundledRenderUnitCapability.getExtendedResourceType();
if (StringUtils.isNotEmpty(extendedResourceTypeString)) {
- collectInheritanceChain(wiredProviders, bundleWiring, extendedResourceTypeString);
- wiredProviders.stream().filter(typeProvider -> typeProvider.getBundledRenderUnitCapability().getResourceTypes().stream()
+ collectInheritanceChain(inheritanceChain, bundleWiring, extendedResourceTypeString);
+ inheritanceChain.stream().filter(typeProvider -> typeProvider.getBundledRenderUnitCapability().getResourceTypes().stream()
.anyMatch(resourceType -> resourceType.getType().equals(extendedResourceTypeString))).findFirst()
.ifPresent(typeProvider -> {
for (ResourceType type : typeProvider.getBundledRenderUnitCapability().getResourceTypes()) {
@@ -167,13 +170,15 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
}
});
}
- collectRequiresChain(wiredProviders, bundleWiring);
- executable = bundledScriptFinder.getScript(wiredProviders);
+ Set<TypeProvider> aggregate =
+ Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
+ executable = bundledScriptFinder.getScript(aggregate);
} else if (StringUtils.isNotEmpty(bundledRenderUnitCapability.getPath()) && StringUtils.isNotEmpty(
bundledRenderUnitCapability.getScriptEngineName())) {
- collectRequiresChain(wiredProviders, bundleWiring);
+ Set<TypeProvider> aggregate =
+ Stream.concat(inheritanceChain.stream(), requiresChain.stream()).collect(Collectors.toCollection(LinkedHashSet::new));
executable = bundledScriptFinder.getScript(baseTypeProvider.getBundle(), baseTypeProvider.isPrecompiled(),
- bundledRenderUnitCapability.getPath(), bundledRenderUnitCapability.getScriptEngineName(), wiredProviders);
+ bundledRenderUnitCapability.getPath(), bundledRenderUnitCapability.getScriptEngineName(), aggregate);
}
List<ServiceRegistration<Servlet>> regs = new ArrayList<>();
@@ -191,7 +196,7 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
regs.add(
bundle.getBundleContext().registerService(
Servlet.class,
- new BundledScriptServlet(scriptContextProvider, wiredProviders, executable),
+ new BundledScriptServlet(scriptContextProvider, inheritanceChain, executable),
properties
)
);
@@ -410,13 +415,15 @@ public class BundledScriptTracker implements BundleTrackerCustomizer<List<Servic
}
}
- private void collectRequiresChain(@NotNull Set<TypeProvider> providers, @NotNull BundleWiring wiring) {
+ private Set<TypeProvider> collectRequiresChain(@NotNull BundleWiring wiring) {
+ Set<TypeProvider> requiresChain = new LinkedHashSet<>();
for (BundleWire wire : wiring.getRequiredWires(NS_SLING_SERVLET)) {
BundledRenderUnitCapability wiredCapability = BundledRenderUnitCapabilityImpl.fromBundleCapability(wire.getCapability());
if (wiredCapability.getSelectors().isEmpty()) {
Bundle providingBundle = wire.getProvider().getBundle();
- providers.add(new TypeProviderImpl(wiredCapability, providingBundle));
+ requiresChain.add(new TypeProviderImpl(wiredCapability, providingBundle));
}
}
+ return requiresChain;
}
}