pinpoint-apm/pinpoint · error · IllegalStateException
BootStrapClassLoader
Error message
BootStrapClassLoader
What it means
IllegalStateException guard in injectClass: plugin classes cannot be injected into the bootstrap classloader (classLoader == Object.class.getClassLoader()), which has no parent to define agent/plugin classes.
Solutions
- Avoid calling injectClass with a bootstrap classloader; pass the agent or system classloader instead
- Register plugin classes on the bootstrap classpath (bootstrap-jars) rather than injecting
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/classloading/PlainClassLoaderHandler.java:71 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/f3e0f166e9d6fbc0.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/classloading/PlainClassLoaderHandler.java:71
private final DefineClass defineClass;
// TODO remove static field
private static final ConcurrentMap<ClassLoader, ClassLoaderAttachment> classLoaderAttachment = new ConcurrentWeakHashMap<>();
private final PluginConfig pluginConfig;
public PlainClassLoaderHandler(DefineClass defineClass, PluginConfig pluginConfig) {
this.defineClass = Objects.requireNonNull(defineClass, "defineClass");
this.pluginConfig = Objects.requireNonNull(pluginConfig, "pluginConfig");
this.pluginJarReader = new JarReader(pluginConfig.getPluginJarFile());
}
@Override
@SuppressWarnings("unchecked")
public <T> Class<? extends T> injectClass(ClassLoader classLoader, String className) {
if (classLoader == Object.class.getClassLoader()) {
throw new IllegalStateException("BootStrapClassLoader");
}
try {
if (!isPluginPackage(className, classLoader)) {
return loadClass(classLoader, className);
}
return (Class<T>) injectClass0(classLoader, className);
} catch (Exception e) {
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 {
final String name = JavaAssistUtils.jvmNameToJavaName(internalName);
if (!isPluginPackage(name, targetClassLoader)) {View on GitHub (pinned to 744c3d3075)