pinpoint-apm/pinpoint · error · PinpointException
Failed to load plugin class {} with classLoader {}
Error message
Failed to load plugin class {} with classLoader {} What it means
PluginClassInjector.injectClass is the top-level plugin class loading entry point: it routes to URLClassLoaderHandler or PlainClassLoaderHandler and wraps any Throwable (including LinkageError, hence the explicit catch of Throwable) in a PinpointException. This log means plugin class injection failed at some layer and instrumentation for that class cannot proceed.
Source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/classloading/PluginClassInjector.java:79
}
@Override
public <T> Class<? extends T> injectClass(ClassLoader classLoader, String className) {
try {
if (bootstrapCore.isBootstrapPackage(className)) {
return bootstrapCore.loadClass(className);
}
if (bootstrapClassLoader == classLoader) {
return bootstrapClassLoaderHandler.injectClass(null, className);
} else if (classLoader instanceof URLClassLoader) {
return urlClassLoaderHandler.injectClass(classLoader, className);
} else {
return plainClassLoaderHandler.injectClass(classLoader, className);
}
} catch (Throwable e) {
// fixed for LinkageError
logger.warn("Failed to load plugin class {} with classLoader {}", className, classLoader, e);
throw new PinpointException("Failed to load plugin class " + className + " with classLoader " + classLoader, e);
}
}
@Override
public InputStream getResourceAsStream(ClassLoader targetClassLoader, String internalName) {
try {
if (bootstrapCore.isBootstrapPackageByInternalName(internalName)) {
return bootstrapCore.openStream(internalName);
}
if (targetClassLoader == null) {
return bootstrapClassLoaderHandler.getResourceAsStream(null, internalName);
} else if (targetClassLoader instanceof URLClassLoader) {
final URLClassLoader urlClassLoader = (URLClassLoader) targetClassLoader;
return urlClassLoaderHandler.getResourceAsStream(urlClassLoader, internalName);
} else {
return plainClassLoaderHandler.getResourceAsStream(targetClassLoader, internalName);
}View on GitHub (pinned to 744c3d3075)
Solutions
- Inspect the cause chain of the PinpointException to identify the failing handler and root error.
- Remove duplicate/corrupt plugin jars from the plugin directory.
- Ensure the plugin class and its dependencies are visible to the target classloader (or bootstrap path if bootstrap-routed).
- For LinkageError, check for the same class being defined twice (concurrent transform) or conflicting plugin versions.
Example fix
// before
Class<?> c = injector.injectClass(classLoader, className); // PinpointException on failure
// after
try {
Class<?> c = injector.injectClass(classLoader, className);
} catch (PinpointException e) {
logger.error("inject failed for {} cause:{}", className, e.getCause());
throw e;
} Defensive patterns
Strategy: try-catch
Validate before calling
boolean isUrl = targetClassLoader instanceof URLClassLoader;
if (!isUrl && !isPlainSupported(targetClassLoader)) { throw new IllegalArgumentException("unsupported classloader: " + targetClassLoader.getClass()); } Type guard
static boolean supportsInjection(ClassLoader cl) {
return cl instanceof URLClassLoader || isPlainClassLoader(cl);
} Try / catch
try { return injector.injectClass(classLoader, className); } catch (PinpointException e) { log.error("inject {} failed, cause: {}", className, e.getCause(), e); throw e; } Prevention
- Deduplicate and integrity-check plugin jars
- Confirm target classloader can see plugin classes and deps
- Route URL vs plain loaders correctly
- Investigate any LinkageError causes for double-definition races
When it happens
Trigger: Any Throwable from urlClassLoaderHandler.injectClass or plainClassLoaderHandler.injectClass — ClassNotFound, LinkageError/duplicate definition, ClassCastException from bad routing, or errors inside define0.
Common situations: Corrupt or duplicate plugin jars; plugin class depending on classes absent from the target classloader; agent applied to exotic classloaders (non-URL, non-plain paths); container classloader isolation (OSGi, modular apps).
Related errors
- not found Caused by:
- not found InterceptorHolderClass, className=
- not found class
- not BootStrapClassLoader
- Failed to load plugin class ${className} with classLoader ${
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/8f3cf2136b43e924.
Report an issue: GitHub.