private void processAdditionalPluginLibraries(Plugin packagingPlugin) { Map<BundleDescriptor, Set<BundleDescriptor>> pluginsWithAdditionalLibraries = doProcessAdditionalPluginLibraries(packagingPlugin); pluginsWithAdditionalLibraries.entrySet() .forEach(entry -> { BundleDescriptor pluginBundleDescriptor = entry.getKey(); Set<BundleDescriptor> pluginAdditionalLibraries = entry.getValue(); findBundleDependency(pluginBundleDescriptor.getGroupId(), pluginBundleDescriptor.getArtifactId(), of(MULE_PLUGIN)) .ifPresent(pluginArtifactBundleDependency -> { replaceBundleDependency(pluginArtifactBundleDependency, new BundleDependency.Builder(pluginArtifactBundleDependency) .setAdditionalDependencies(pluginAdditionalLibraries.stream() .map(additionalDependency -> new BundleDependency.Builder() .setDescriptor(additionalDependency).build()) .collect(toSet())) .build()); }); }); }
public BundleDependency convert(org.mule.maven.client.api.model.BundleDependency mavenBundleDependency) { BundleDependency bundleDependency = cache.get(mavenBundleDependency.getDescriptor()); if ((bundleDependency != null && bundleDependency.getBundleUri() != null) || (bundleDependency != null && mavenBundleDependency.getBundleUri() == null)) { return bundleDependency; } BundleDependency.Builder builder = new BundleDependency.Builder() .setScope(BundleScope.valueOf(mavenBundleDependency.getScope().name())) .setBundleUri(mavenBundleDependency.getBundleUri()) .setTransitiveDependencies(mavenBundleDependency.getTransitiveDependencies().stream() .filter(transitiveDependency -> !org.mule.maven.client.api.model.BundleScope.PROVIDED .equals(transitiveDependency.getScope())) .map(this::convert) .collect(toSet())) .setDescriptor(convertBundleDescriptor(mavenBundleDependency.getDescriptor())); bundleDependency = builder.build(); cache.put(mavenBundleDependency.getDescriptor(), bundleDependency); return bundleDependency; }
@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))); } }
@Test public void createsDependantPlugins() throws Exception { 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); when(regionOwnerLookupPolicy.extend(argThat(any(Map.class)))).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1, pluginClassLoader2)); }
private static BundleDependency createBundleDependency(BundleDescriptor bundleDescriptor) { return new BundleDependency.Builder().setDescriptor(bundleDescriptor).build(); }
private Function<Artifact, BundleDependency> createBundleDependencyFromPackagerDependency(File artifactFile) { return d -> { File bundle = new File(artifactFile, d.getUri().toString()); return new BundleDependency.Builder() .setDescriptor(new BundleDescriptor.Builder().setArtifactId(d.getArtifactCoordinates().getArtifactId()) .setGroupId(d.getArtifactCoordinates().getGroupId()) .setClassifier(d.getArtifactCoordinates().getClassifier()) .setType(d.getArtifactCoordinates().getType()).setVersion(d.getArtifactCoordinates().getVersion()) .build()) .setBundleUri(bundle.toURI()) .build(); }; }
private ClassLoaderModel createClassLoaderModelWithDomain() { BundleDescriptor domainDescriptor = new BundleDescriptor.Builder().setArtifactId(DOMAIN_NAME).setGroupId("test") .setVersion("1.0.0").setClassifier(MULE_DOMAIN_CLASSIFIER).build(); Set<BundleDependency> domainDependency = Collections.singleton(new BundleDependency.Builder().setDescriptor(domainDescriptor).build()); return new ClassLoaderModel.ClassLoaderModelBuilder().dependingOn(domainDependency).build(); }
protected BundleDependency convertBundleDependency(org.mule.maven.client.api.model.BundleDependency mavenClientDependency) { BundleDependency.Builder builder = new BundleDependency.Builder() .setScope(BundleScope.valueOf(mavenClientDependency.getScope().name())) .setBundleUri(mavenClientDependency.getBundleUri()) .setDescriptor(convertBundleDescriptor(mavenClientDependency.getDescriptor())); return builder.build(); }
.setDescriptor(artifactPluginDescriptorResolved.getBundleDescriptor()) .setScope(dependency.getScope()) .build())) .build()); } else {
@Test public void remembersRamlApiClassLoader() throws Exception { final ClassLoader parentClassLoader = mock(ClassLoader.class); ArtifactDescriptor appDescriptor = mock(ArtifactDescriptor.class); RegionClassLoader regionClassLoader = new RegionClassLoader(ARTIFACT_ID, appDescriptor, parentClassLoader, lookupPolicy); createClassLoaders(parentClassLoader); ClassLoaderModel classLoaderModel = new ClassLoaderModel.ClassLoaderModelBuilder() .dependingOn(newHashSet(new BundleDependency.Builder() .setBundleUri(API_LOCATION.toURI()) .setDescriptor(new BundleDescriptor.Builder() .setGroupId(GROUP_ID) .setArtifactId(SPECIFIC_ARTIFACT_ID) .setVersion(ARTIFACT_VERSION) .setClassifier("raml") .setType("zip") .build()) .build())) .build(); when(appDescriptor.getClassLoaderModel()).thenReturn(classLoaderModel); String apiResource = format(SPECIFIC_RESOURCE_FORMAT, ARTIFACT_VERSION, "raml", "zip", API_RESOURCE_NAME); assertThat(regionClassLoader.findResource(apiResource), is(API_LOADED_RESOURCE)); assertThat(regionClassLoader.findResource(apiResource), is(API_LOADED_RESOURCE)); assertThat(regionClassLoader.findResource(apiResource), is(API_LOADED_RESOURCE)); assertThat(regionClassLoader.findResource(apiResource), is(API_LOADED_RESOURCE)); assertThat(regionClassLoader.findResource(apiResource), is(API_LOADED_RESOURCE)); verify(appDescriptor, times(1)).getClassLoaderModel(); }
private void getResourceFromApiArtifact(String apiKind, String resource, URL expectedResult) throws Exception { final ClassLoader parentClassLoader = mock(ClassLoader.class); ArtifactDescriptor appDescriptor = mock(ArtifactDescriptor.class); RegionClassLoader regionClassLoader = new RegionClassLoader(ARTIFACT_ID, appDescriptor, parentClassLoader, lookupPolicy); createClassLoaders(parentClassLoader); ClassLoaderModel classLoaderModel = new ClassLoaderModel.ClassLoaderModelBuilder() .dependingOn(newHashSet(new BundleDependency.Builder() .setBundleUri(API_LOCATION.toURI()) .setDescriptor(new BundleDescriptor.Builder() .setGroupId(GROUP_ID) .setArtifactId(SPECIFIC_ARTIFACT_ID) .setVersion(ARTIFACT_VERSION) .setClassifier(apiKind) .setType("zip") .build()) .build())) .build(); when(appDescriptor.getClassLoaderModel()).thenReturn(classLoaderModel); URL result = regionClassLoader.findResource(resource); assertThat(result, is(expectedResult)); }
private BundleDependency toBundleDependency(Artifact artifact) { BundleDependency.Builder builder = new BundleDependency.Builder(); if (artifact.getArtifactCoordinates().getScope() != null) { builder.setScope(BundleScope.valueOf(artifact.getArtifactCoordinates().getScope().toUpperCase())); } return builder .setBundleUri(new File(artifactFolder, artifact.getUri().toString()).toURI()) .setDescriptor(new BundleDescriptor.Builder() .setArtifactId(artifact.getArtifactCoordinates().getArtifactId()) .setGroupId(artifact.getArtifactCoordinates().getGroupId()) .setVersion(artifact.getArtifactCoordinates().getVersion()) .setClassifier(artifact.getArtifactCoordinates().getClassifier()) .setType(artifact.getArtifactCoordinates().getType()) .build()) .build(); }
@Test public void createsDependantPlugins() throws Exception { 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); when(regionOwnerLookupPolicy.extend(argThat(any(Map.class)))).thenReturn(pluginLookupPolicy); List<ArtifactClassLoader> pluginClassLoaders = factory.createPluginClassLoaders(regionClassLoader, artifactPluginDescriptors, regionOwnerLookupPolicy); assertThat(pluginClassLoaders, contains(pluginClassLoader1, pluginClassLoader2)); }
private Function<Artifact, BundleDependency> createBundleDependencyFromPackagerDependency(File artifactFile) { return d -> { File bundle = new File(artifactFile, d.getUri().toString()); return new BundleDependency.Builder() .setDescriptor( new BundleDescriptor.Builder().setArtifactId(d.getArtifactCoordinates().getArtifactId()) .setGroupId(d.getArtifactCoordinates().getGroupId()) .setClassifier(d.getArtifactCoordinates().getClassifier()) .setType(d.getArtifactCoordinates().getType()).setVersion(d.getArtifactCoordinates().getVersion()) .build()) .setBundleUri(bundle.toURI()) .build(); }; }
private BundleDependency createExtendedBundleDependency(BundleDependency original, Set<BundleDependency> additionalPluginDependencies) { return new BundleDependency.Builder(original).setAdditionalDependencies(additionalPluginDependencies).build(); }
private static BundleDependency createBundleDependency(BundleDescriptor bundleDescriptor, boolean createBundleUri) { try { final BundleDependency.Builder builder = new BundleDependency.Builder(); builder.setDescriptor(bundleDescriptor); builder.setScope(BundleScope.COMPILE); if (createBundleUri) { builder.setBundleUri(temporaryFolder.newFile(bundleDescriptor.getArtifactFileName()).toURI()); } return builder.build(); } catch (IOException e) { throw new UncheckedIOException(e); } }
private ClassLoaderModel createClassLoaderModelWithDomain() { BundleDescriptor domainDescriptor = new BundleDescriptor.Builder().setArtifactId(DOMAIN_NAME).setGroupId("test") .setVersion("1.0.0").setClassifier(MULE_DOMAIN_CLASSIFIER).build(); Set<BundleDependency> domainDependency = Collections.singleton(new BundleDependency.Builder().setDescriptor(domainDescriptor).build()); return new ClassLoaderModel.ClassLoaderModelBuilder().dependingOn(domainDependency).build(); }