classLoaderModelBuilder .exportingPackages(new HashSet<>(getAttribute(attributes, EXPORTED_PACKAGES))) .exportingPrivilegedPackages(new HashSet<>(getAttribute(attributes, PRIVILEGED_EXPORTED_PACKAGES)), new HashSet<>(getAttribute(attributes, PRIVILEGED_ARTIFACTS_IDS))) .exportingResources(new HashSet<>(getAttribute(attributes, EXPORTED_RESOURCES)))
private ClassLoaderModel createHeavyPackageClassLoaderModel(File artifactFile, Map<String, Object> attributes) { File classLoaderModelDescriptor = getClassLoaderModelDescriptor(artifactFile); org.mule.tools.api.classloader.model.ClassLoaderModel packagerClassLoaderModel = getPackagerClassLoaderModel(classLoaderModelDescriptor); File deployableArtifactRepositoryFolder = getDeployableArtifactRepositoryFolder(artifactFile); final ArtifactClassLoaderModelBuilder classLoaderModelBuilder = newHeavyWeightClassLoaderModelBuilder(artifactFile, (BundleDescriptor) attributes.get(BundleDescriptor.class.getName()), packagerClassLoaderModel, attributes); classLoaderModelBuilder .exportingPackages(new HashSet<>(getAttribute(attributes, EXPORTED_PACKAGES))) .exportingPrivilegedPackages(new HashSet<>(getAttribute(attributes, PRIVILEGED_EXPORTED_PACKAGES)), new HashSet<>(getAttribute(attributes, PRIVILEGED_ARTIFACTS_IDS))) .exportingResources(new HashSet<>(getAttribute(attributes, EXPORTED_RESOURCES))); Set<BundleDependency> patchBundleDependencies = getPatchedBundledDependencies(artifactFile, deployableArtifactRepositoryFolder); Set<BundleDependency> bundleDependencies = packagerClassLoaderModel.getDependencies().stream().map(artifact -> { Optional<BundleDependency> patchedBundledDependency = patchBundleDependencies.stream().filter(bundleDependency -> bundleDependency.getDescriptor().getGroupId() .equals(artifact.getArtifactCoordinates().getGroupId()) && bundleDependency.getDescriptor().getArtifactId().equals(artifact.getArtifactCoordinates().getArtifactId())) .findAny(); return patchedBundledDependency .orElse(createBundleDependencyFromPackagerDependency(deployableArtifactRepositoryFolder).apply(artifact)); }).collect(toSet()); loadUrls(artifactFile, classLoaderModelBuilder, bundleDependencies); classLoaderModelBuilder.dependingOn(bundleDependencies); return classLoaderModelBuilder.build(); }
private ClassLoaderModelBuilder createBuilderWithoutDependency(ClassLoaderModel originalClassLoaderModel, BundleDependency dependencyToBeExcluded) { ClassLoaderModelBuilder classLoaderModelBuilder = new ClassLoaderModelBuilder() .dependingOn(originalClassLoaderModel.getDependencies().stream() .filter(dependency -> !dependency.equals(dependencyToBeExcluded)) .collect(toSet())) .exportingPackages(originalClassLoaderModel.getExportedPackages()) .exportingPrivilegedPackages(originalClassLoaderModel.getPrivilegedExportedPackages(), originalClassLoaderModel.getPrivilegedArtifacts()) .exportingResources(originalClassLoaderModel.getExportedResources()); for (URL url : originalClassLoaderModel.getUrls()) { classLoaderModelBuilder.containing(url); } return classLoaderModelBuilder; }
classLoaderModelBuilder .exportingPackages(new HashSet<>(getAttribute(attributes, EXPORTED_PACKAGES))) .exportingPrivilegedPackages(new HashSet<>(getAttribute(attributes, PRIVILEGED_EXPORTED_PACKAGES)), new HashSet<>(getAttribute(attributes, PRIVILEGED_ARTIFACTS_IDS))) .exportingResources(new HashSet<>(getAttribute(attributes, EXPORTED_RESOURCES)))
private ClassLoaderModel createHeavyPackageClassLoaderModel(File artifactFile, Map<String, Object> attributes) { File classLoaderModelDescriptor = getClassLoaderModelDescriptor(artifactFile); org.mule.tools.api.classloader.model.ClassLoaderModel packagerClassLoaderModel = deserialize(classLoaderModelDescriptor); File deployableArtifactRepositoryFolder = getDeployableArtifactRepositoryFolder(artifactFile); final ClassLoaderModel.ClassLoaderModelBuilder classLoaderModelBuilder = new ClassLoaderModel.ClassLoaderModelBuilder(); classLoaderModelBuilder .exportingPackages(new HashSet<>(getAttribute(attributes, EXPORTED_PACKAGES))) .exportingPrivilegedPackages(new HashSet<>(getAttribute(attributes, PRIVILEGED_EXPORTED_PACKAGES)), new HashSet<>(getAttribute(attributes, PRIVILEGED_ARTIFACTS_IDS))) .exportingResources(new HashSet<>(getAttribute(attributes, EXPORTED_RESOURCES))); Set<BundleDependency> patchBundleDependencies = getPatchedBundledDependencies(artifactFile, deployableArtifactRepositoryFolder); Set<BundleDependency> bundleDependencies = packagerClassLoaderModel.getDependencies().stream().map(artifact -> { Optional<BundleDependency> patchedBundledDependency = patchBundleDependencies.stream().filter(bundleDependency -> bundleDependency.getDescriptor().getGroupId() .equals(artifact.getArtifactCoordinates().getGroupId()) && bundleDependency.getDescriptor().getArtifactId().equals(artifact.getArtifactCoordinates().getArtifactId())) .findAny(); return patchedBundledDependency .orElse(createBundleDependencyFromPackagerDependency(deployableArtifactRepositoryFolder).apply(artifact)); }).collect(toSet()); loadUrls(artifactFile, classLoaderModelBuilder, bundleDependencies); classLoaderModelBuilder.dependingOn(bundleDependencies); return classLoaderModelBuilder.build(); }
@Test public void createsPluginWithPrivilegedPluginAccess() throws Exception { ClassLoaderModel plugin1ClassLoaderModel = new ClassLoaderModel.ClassLoaderModelBuilder() .exportingPrivilegedPackages(singleton(PRIVILEGED_PACKAGE), singleton(PLUGIN_ARTIFACT_ID2)).build(); plugin1Descriptor.setClassLoaderModel(plugin1ClassLoaderModel); BundleDependency pluginDependency = new BundleDependency.Builder().setScope(BundleScope.COMPILE).setDescriptor( PLUGIN1_BUNDLE_DESCRIPTOR) .setBundleUri(new File("test").toURI()) .build(); plugin2Descriptor .setClassLoaderModel(new ClassLoaderModel.ClassLoaderModelBuilder().dependingOn(singleton(pluginDependency)).build()); List<ArtifactPluginDescriptor> artifactPluginDescriptors = new ArrayList<>(); artifactPluginDescriptors.add(plugin1Descriptor); artifactPluginDescriptors.add(plugin2Descriptor); ArgumentCaptor<Map> argumentCaptor = forClass(Map.class); when(regionOwnerLookupPolicy.extend(argumentCaptor.capture())).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1, pluginClassLoader2)); assertThat((Map<String, LookupStrategy>) argumentCaptor.getAllValues().get(0), not(hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(DelegateOnlyLookupStrategy.class)))); assertThat((Map<String, LookupStrategy>) argumentCaptor.getAllValues().get(1), hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(DelegateOnlyLookupStrategy.class))); } }
@Test public void createsPluginWithPrivilegedPluginAccess() throws Exception { ClassLoaderModel plugin1ClassLoaderModel = new ClassLoaderModel.ClassLoaderModelBuilder() .exportingPrivilegedPackages(singleton(PRIVILEGED_PACKAGE), singleton(PLUGIN_ARTIFACT_ID2)).build(); plugin1Descriptor.setClassLoaderModel(plugin1ClassLoaderModel); BundleDependency pluginDependency = new BundleDependency.Builder().setScope(BundleScope.COMPILE).setDescriptor( PLUGIN1_BUNDLE_DESCRIPTOR) .setBundleUri(new File("test").toURI()) .build(); plugin2Descriptor .setClassLoaderModel(new ClassLoaderModel.ClassLoaderModelBuilder().dependingOn(singleton(pluginDependency)).build()); List<ArtifactPluginDescriptor> artifactPluginDescriptors = new ArrayList<>(); artifactPluginDescriptors.add(plugin1Descriptor); artifactPluginDescriptors.add(plugin2Descriptor); ArgumentCaptor<Map> argumentCaptor = forClass(Map.class); when(regionOwnerLookupPolicy.extend(argumentCaptor.capture())).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1, pluginClassLoader2)); assertThat((Map<String, LookupStrategy>) argumentCaptor.getAllValues().get(0), not(hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(DelegateOnlyLookupStrategy.class)))); assertThat((Map<String, LookupStrategy>) argumentCaptor.getAllValues().get(1), hasEntry(equalTo(PRIVILEGED_PACKAGE), instanceOf(DelegateOnlyLookupStrategy.class))); } }
private ClassLoaderModelBuilder createBuilderWithoutExportedPackages(ClassLoaderModel originalClassLoaderModel) { ClassLoaderModelBuilder classLoaderModelBuilder = new ClassLoaderModelBuilder() .dependingOn(originalClassLoaderModel.getDependencies()) .exportingPrivilegedPackages(originalClassLoaderModel.getPrivilegedExportedPackages(), originalClassLoaderModel.getPrivilegedArtifacts()) .exportingResources(originalClassLoaderModel.getExportedResources()); for (URL url : originalClassLoaderModel.getUrls()) { classLoaderModelBuilder.containing(url); } return classLoaderModelBuilder; }