private Set<String> getModuleExportedPackages(List<MuleModule> muleModules) { Set<String> packages = new HashSet<>(); for (MuleModule muleModule : muleModules) { packages.addAll(muleModule.getExportedPackages()); } return packages; }
/** * Creates a {@link Map<String, LookupStrategy>} for the packages exported on the container. * * @param containerClassLoader class loader containing container's classes. Non null. * @param modules to be used for collecting the exported packages. Non null * @return a {@link Map<String, LookupStrategy>} for the packages exported on the container */ private Map<String, LookupStrategy> buildClassLoaderLookupStrategy(ClassLoader containerClassLoader, List<MuleModule> modules) { checkArgument(containerClassLoader != null, "containerClassLoader cannot be null"); checkArgument(modules != null, "modules cannot be null"); ContainerOnlyLookupStrategy containerOnlyLookupStrategy = new ContainerOnlyLookupStrategy(containerClassLoader); final Map<String, LookupStrategy> result = new HashMap<>(); for (MuleModule muleModule : modules) { for (String exportedPackage : muleModule.getExportedPackages()) { // Let artifacts extend non "java." JRE packages result.put(exportedPackage, ALLOW_JRE_EXTENSION && stream(JRE_EXTENDABLE_PACKAGES).anyMatch(exportedPackage::startsWith) ? PARENT_FIRST : containerOnlyLookupStrategy); } } return result; }
/** * Factory class that extends the default way to create a container {@link ArtifactClassLoader} in order to support the * differences when running applications in standalone container vs junit. * * @param extraBootPackages {@link List} of {@link String}s extra boot packages that need to be appended to the container (junit * for instance) * @param urls {@link URL}s that were classified to be added to the container {@link ClassLoader} * @param moduleRepository provides access to the modules available on the container. Non null. */ public TestContainerClassLoaderFactory(final List<String> extraBootPackages, final URL[] urls, ModuleRepository moduleRepository) { super(moduleRepository); this.extraBootPackages = ImmutableSet.<String>builder().addAll(super.getBootPackages()).addAll(extraBootPackages) .addAll(new JreModuleDiscoverer().discover().get(0).getExportedPackages()).build(); this.urls = urls; this.classLoader = new URLClassLoader(urls, null); this.testContainerModuleRepository = new DefaultModuleRepository(new TestContainerModuleDiscoverer(classLoader)); }
private MuleModule updateModuleForTests(MuleModule discoveredModule) { Set<String> privilegedArtifacts = new HashSet<>(discoveredModule.getPrivilegedArtifacts()); privilegedArtifacts.addAll(privilegedArtifactIds); return new MuleModule(discoveredModule.getName(), discoveredModule.getExportedPackages(), discoveredModule.getExportedPaths(), discoveredModule.getPrivilegedExportedPackages(), privilegedArtifacts, discoveredModule.getExportedServices()); } }
@Test public void discoversJreModule() throws Exception { final List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules.size(), equalTo(1)); final MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), equalTo(JRE_MODULE_NAME)); assertThat(muleModule.getExportedPaths(), is(not(empty()))); assertThat(muleModule.getExportedPackages(), is(not(empty()))); assertThat(muleModule.getExportedServices(), is(not(empty()))); } }
@Test public void discoversModuleWithExportedPrivilegedApi() throws Exception { runTest(moduleDiscoverer -> { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleJavaPrivilegedApi.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleJavaPrivilegedApi")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), contains("org.foo", "org.bar")); assertThat(muleModule.getPrivilegedArtifacts(), contains("privilegedArtifact1", "privilegedArtifact2")); assertThat(muleModule.getExportedServices(), is(empty())); }); }
@Test public void discoversModuleWithExportedJavaPackages() throws Exception { runTest(moduleDiscoverer -> { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleJavaPackages.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleJavaPackages")); assertThat(muleModule.getExportedPackages(), contains("org.foo", "org.bar")); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices(), is(empty())); }); }
@Test public void discoversModuleWithExportedResourcePackages() throws Exception { runTest(moduleDiscoverer -> { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleResourcePackages.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleResourcePackages")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), containsInAnyOrder("META-INF/module.xsd", "README.txt")); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices(), is(empty())); }); }
@Test public void discoversModuleWithExportedServices() throws Exception { runTest(moduleDiscoverer -> { List<URL> moduleProperties = new ArrayList(); moduleProperties.add(getClass().getClassLoader().getResource("moduleExportedServices.properties")); when(classLoader.getResources(ClasspathModuleDiscoverer.MODULE_PROPERTIES)) .thenReturn(new EnumerationAdapter(moduleProperties)); List<MuleModule> muleModules = moduleDiscoverer.discover(); assertThat(muleModules, hasSize(1)); MuleModule muleModule = muleModules.get(0); assertThat(muleModule.getName(), is("moduleExportedServices")); assertThat(muleModule.getExportedPackages(), is(empty())); assertThat(muleModule.getExportedPaths(), is(empty())); assertThat(muleModule.getPrivilegedExportedPackages(), is(empty())); assertThat(muleModule.getPrivilegedArtifacts(), is(empty())); assertThat(muleModule.getExportedServices().size(), equalTo(3)); assertThat(muleModule.getExportedServices().get(0).getServiceInterface(), equalTo("org.foo.ServiceInterface")); assertThat(muleModule.getExportedServices().get(1).getServiceInterface(), equalTo("org.foo.ServiceInterface")); assertThat(muleModule.getExportedServices().get(2).getServiceInterface(), equalTo("org.bar.ServiceInterface")); }); }
/** * Factory class that extends the default way to create a container {@link ArtifactClassLoader} in order to support the * differences when running applications in standalone container vs junit. * * @param extraBootPackages {@link List} of {@link String}s extra boot packages that need to be appended to the container (junit * for instance) * @param urls {@link URL}s that were classified to be added to the container {@link ClassLoader} * @param moduleRepository provides access to the modules available on the container. Non null. */ public TestContainerClassLoaderFactory(final List<String> extraBootPackages, final URL[] urls, ModuleRepository moduleRepository) { super(moduleRepository); this.extraBootPackages = ImmutableSet.<String>builder().addAll(super.getBootPackages()).addAll(extraBootPackages) .addAll(new JreModuleDiscoverer().discover().get(0).getExportedPackages()).build(); this.urls = urls; this.classLoader = new URLClassLoader(urls, null); this.testContainerModuleRepository = new DefaultModuleRepository(new TestContainerModuleDiscoverer(classLoader)); }
private MuleModule updateModuleForTests(MuleModule discoveredModule) { Set<String> privilegedArtifacts = new HashSet<>(discoveredModule.getPrivilegedArtifacts()); privilegedArtifacts.addAll(privilegedArtifactIds); return new MuleModule(discoveredModule.getName(), discoveredModule.getExportedPackages(), discoveredModule.getExportedPaths(), discoveredModule.getPrivilegedExportedPackages(), privilegedArtifacts, discoveredModule.getExportedServices()); } }