Search in sources :

Example 1 with CompositeClassNotFoundException

use of org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException in project mule by mulesoft.

the class FineGrainedControlClassLoader method loadClass.

@Override
protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException {
    Class<?> result = findLoadedClass(name);
    if (result != null) {
        return result;
    }
    final LookupStrategy lookupStrategy = lookupPolicy.getClassLookupStrategy(name);
    if (lookupStrategy == null) {
        throw new NullPointerException(format("Unable to find a lookup strategy for '%s' from %s", name, this));
    }
    if (verboseLogging) {
        logLoadingClass(name, lookupStrategy, "Loading class '%s' with '%s' on '%s'", this);
    }
    // Gather information about the exceptions in each of the searched class loaders to provide
    // troubleshooting information in case of throwing a ClassNotFoundException.
    List<ClassNotFoundException> exceptions = new ArrayList<>();
    for (ClassLoader classLoader : lookupStrategy.getClassLoaders(this)) {
        try {
            if (classLoader == this) {
                result = findLocalClass(name);
                break;
            } else {
                result = findParentClass(name, classLoader);
                break;
            }
        } catch (ClassNotFoundException e) {
            exceptions.add(e);
        }
    }
    if (result == null) {
        throw new CompositeClassNotFoundException(name, lookupStrategy, exceptions);
    }
    if (verboseLogging) {
        logLoadedClass(name, result);
    }
    if (resolve) {
        resolveClass(result);
    }
    return result;
}
Also used : ArrayList(java.util.ArrayList) URLClassLoader(java.net.URLClassLoader) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException)

Example 2 with CompositeClassNotFoundException

use of org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException in project mule by mulesoft.

the class FineGrainedControlClassLoaderTestCase method usesParentFirstAndChildLookupAndFails.

@Test
public void usesParentFirstAndChildLookupAndFails() throws Exception {
    ClassLoader parent = Thread.currentThread().getContextClassLoader();
    final ClassLoaderLookupPolicy lookupPolicy = mock(ClassLoaderLookupPolicy.class);
    when(lookupPolicy.getClassLookupStrategy(TEST_CLASS_NAME)).thenReturn(PARENT_FIRST);
    expected.expect(CompositeClassNotFoundException.class);
    expected.expectMessage(startsWith("Cannot load class '" + TEST_CLASS_NAME + "': ["));
    FineGrainedControlClassLoader ext = buildFineGrainedControlClassLoader(parent, lookupPolicy);
    expected.expect(expressionMatches((e) -> ((CompositeClassNotFoundException) e).getExceptions(), contains(hasMessage(is(TEST_CLASS_NAME)), expressionMatches((e) -> ((TestClassNotFoundException) e).getClassLoader(), is((ClassLoader) ext)))));
    invokeTestClassMethod(ext);
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) System.lineSeparator(java.lang.System.lineSeparator) FunctionExpressionMatcher.expressionMatches(org.mule.tck.junit4.matcher.FunctionExpressionMatcher.expressionMatches) PARENT_ONLY(org.mule.runtime.module.artifact.api.classloader.ParentOnlyLookupStrategy.PARENT_ONLY) URL(java.net.URL) CoreMatchers.startsWith(org.hamcrest.CoreMatchers.startsWith) PARENT_FIRST(org.mule.runtime.module.artifact.api.classloader.ParentFirstLookupStrategy.PARENT_FIRST) ClassUtils(org.mule.runtime.core.api.util.ClassUtils) URLClassLoader(java.net.URLClassLoader) AbstractMuleTestCase(org.mule.tck.junit4.AbstractMuleTestCase) SmallTest(org.mule.tck.size.SmallTest) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) Method(java.lang.reflect.Method) ExpectedException(org.junit.rules.ExpectedException) CoreMatchers.sameInstance(org.hamcrest.CoreMatchers.sameInstance) ThrowableMessageMatcher.hasMessage(org.junit.internal.matchers.ThrowableMessageMatcher.hasMessage) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) CHILD_FIRST(org.mule.runtime.module.artifact.api.classloader.ChildFirstLookupStrategy.CHILD_FIRST) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Rule(org.junit.Rule) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) Matchers.contains(org.hamcrest.Matchers.contains) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) URLClassLoader(java.net.URLClassLoader) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) SmallTest(org.mule.tck.size.SmallTest) Test(org.junit.Test)

Example 3 with CompositeClassNotFoundException

use of org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException in project mule by mulesoft.

the class FineGrainedControlClassLoaderTestCase method usesParentOnlyLookupAndFails.

@Test
public void usesParentOnlyLookupAndFails() throws Exception {
    ClassLoader parent = mock(ClassLoader.class);
    final ClassNotFoundException thrownException = new ClassNotFoundException("ERROR");
    when(parent.loadClass(TEST_CLASS_NAME)).thenThrow(thrownException);
    final ClassLoaderLookupPolicy lookupPolicy = mock(ClassLoaderLookupPolicy.class);
    when(lookupPolicy.getClassLookupStrategy(TEST_CLASS_NAME)).thenReturn(PARENT_ONLY);
    expected.expect(CompositeClassNotFoundException.class);
    expected.expectMessage(startsWith("Cannot load class '" + TEST_CLASS_NAME + "': [" + lineSeparator() + "\t" + "ERROR]"));
    expected.expect(expressionMatches((e) -> ((CompositeClassNotFoundException) e).getExceptions(), contains(sameInstance(thrownException))));
    FineGrainedControlClassLoader ext = new FineGrainedControlClassLoader(new URL[] { getChildFileResource() }, parent, lookupPolicy);
    ext.loadClass(TEST_CLASS_NAME);
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) System.lineSeparator(java.lang.System.lineSeparator) FunctionExpressionMatcher.expressionMatches(org.mule.tck.junit4.matcher.FunctionExpressionMatcher.expressionMatches) PARENT_ONLY(org.mule.runtime.module.artifact.api.classloader.ParentOnlyLookupStrategy.PARENT_ONLY) URL(java.net.URL) CoreMatchers.startsWith(org.hamcrest.CoreMatchers.startsWith) PARENT_FIRST(org.mule.runtime.module.artifact.api.classloader.ParentFirstLookupStrategy.PARENT_FIRST) ClassUtils(org.mule.runtime.core.api.util.ClassUtils) URLClassLoader(java.net.URLClassLoader) AbstractMuleTestCase(org.mule.tck.junit4.AbstractMuleTestCase) SmallTest(org.mule.tck.size.SmallTest) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) Method(java.lang.reflect.Method) ExpectedException(org.junit.rules.ExpectedException) CoreMatchers.sameInstance(org.hamcrest.CoreMatchers.sameInstance) ThrowableMessageMatcher.hasMessage(org.junit.internal.matchers.ThrowableMessageMatcher.hasMessage) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) CHILD_FIRST(org.mule.runtime.module.artifact.api.classloader.ChildFirstLookupStrategy.CHILD_FIRST) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Rule(org.junit.Rule) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) Matchers.contains(org.hamcrest.Matchers.contains) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) URLClassLoader(java.net.URLClassLoader) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) SmallTest(org.mule.tck.size.SmallTest) Test(org.junit.Test)

Example 4 with CompositeClassNotFoundException

use of org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException in project mule by mulesoft.

the class FineGrainedControlClassLoaderTestCase method usesChildFirstThenParentLookupAndFails.

@Test
public void usesChildFirstThenParentLookupAndFails() throws Exception {
    ClassLoader parent = Thread.currentThread().getContextClassLoader();
    final ClassLoaderLookupPolicy lookupPolicy = mock(ClassLoaderLookupPolicy.class);
    when(lookupPolicy.getClassLookupStrategy(TEST_CLASS_NAME)).thenReturn(CHILD_FIRST);
    expected.expect(CompositeClassNotFoundException.class);
    expected.expectMessage(startsWith("Cannot load class '" + TEST_CLASS_NAME + "': ["));
    FineGrainedControlClassLoader ext = buildFineGrainedControlClassLoader(parent, lookupPolicy);
    expected.expect(expressionMatches((e) -> ((CompositeClassNotFoundException) e).getExceptions(), contains(expressionMatches((e) -> ((TestClassNotFoundException) e).getClassLoader(), is((ClassLoader) ext)), hasMessage(is(TEST_CLASS_NAME)))));
    invokeTestClassMethod(ext);
}
Also used : CoreMatchers.is(org.hamcrest.CoreMatchers.is) System.lineSeparator(java.lang.System.lineSeparator) FunctionExpressionMatcher.expressionMatches(org.mule.tck.junit4.matcher.FunctionExpressionMatcher.expressionMatches) PARENT_ONLY(org.mule.runtime.module.artifact.api.classloader.ParentOnlyLookupStrategy.PARENT_ONLY) URL(java.net.URL) CoreMatchers.startsWith(org.hamcrest.CoreMatchers.startsWith) PARENT_FIRST(org.mule.runtime.module.artifact.api.classloader.ParentFirstLookupStrategy.PARENT_FIRST) ClassUtils(org.mule.runtime.core.api.util.ClassUtils) URLClassLoader(java.net.URLClassLoader) AbstractMuleTestCase(org.mule.tck.junit4.AbstractMuleTestCase) SmallTest(org.mule.tck.size.SmallTest) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) Method(java.lang.reflect.Method) ExpectedException(org.junit.rules.ExpectedException) CoreMatchers.sameInstance(org.hamcrest.CoreMatchers.sameInstance) ThrowableMessageMatcher.hasMessage(org.junit.internal.matchers.ThrowableMessageMatcher.hasMessage) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) CHILD_FIRST(org.mule.runtime.module.artifact.api.classloader.ChildFirstLookupStrategy.CHILD_FIRST) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Rule(org.junit.Rule) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) Matchers.contains(org.hamcrest.Matchers.contains) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) TestClassNotFoundException(org.mule.tck.classlaoder.TestClassLoader.TestClassNotFoundException) ClassLoaderLookupPolicy(org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy) URLClassLoader(java.net.URLClassLoader) TestClassLoader(org.mule.tck.classlaoder.TestClassLoader) FineGrainedControlClassLoader(org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader) CompositeClassNotFoundException(org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException) SmallTest(org.mule.tck.size.SmallTest) Test(org.junit.Test)

Aggregations

URLClassLoader (java.net.URLClassLoader)4 CompositeClassNotFoundException (org.mule.runtime.module.artifact.api.classloader.exception.CompositeClassNotFoundException)4 System.lineSeparator (java.lang.System.lineSeparator)3 Method (java.lang.reflect.Method)3 URL (java.net.URL)3 CoreMatchers.is (org.hamcrest.CoreMatchers.is)3 CoreMatchers.sameInstance (org.hamcrest.CoreMatchers.sameInstance)3 CoreMatchers.startsWith (org.hamcrest.CoreMatchers.startsWith)3 Matchers.contains (org.hamcrest.Matchers.contains)3 Assert.assertEquals (org.junit.Assert.assertEquals)3 Rule (org.junit.Rule)3 Test (org.junit.Test)3 ThrowableMessageMatcher.hasMessage (org.junit.internal.matchers.ThrowableMessageMatcher.hasMessage)3 ExpectedException (org.junit.rules.ExpectedException)3 Mockito.mock (org.mockito.Mockito.mock)3 Mockito.when (org.mockito.Mockito.when)3 ClassUtils (org.mule.runtime.core.api.util.ClassUtils)3 CHILD_FIRST (org.mule.runtime.module.artifact.api.classloader.ChildFirstLookupStrategy.CHILD_FIRST)3 ClassLoaderLookupPolicy (org.mule.runtime.module.artifact.api.classloader.ClassLoaderLookupPolicy)3 FineGrainedControlClassLoader (org.mule.runtime.module.artifact.api.classloader.FineGrainedControlClassLoader)3