pinpoint-apm/pinpoint · error · IllegalStateException
ClassLoader.findBootstrapClassOrNull api not found
Error message
ClassLoader.findBootstrapClassOrNull api not found
What it means
Fires in findBootstrapClassOrNullMethod when neither ClassLoader.findBootstrapClassOrNull (OpenJDK 7+) nor the legacy findBootstrapClass0 (OpenJDK 6) can be found via reflection: the running JDK exposes neither private method, so the bootstrap class lookup cannot be wired up.
Solutions
- Run Pinpoint on a supported JDK (OpenJDK 6+ or a JVM exposing findBootstrapClassOrNull)
- Upgrade the agent to a version supporting your JDK's classloader internals
- Verify no security manager or JPMS strong encapsulation blocks getDeclaredMethod on java.lang.ClassLoader
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/LauncherBootLoader.java:66 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/d1cc11525499ae9c.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/classloader/LauncherBootLoader.java:66
// openjdk7 : success
// openjdk6 : fail (findBootstrapClass0)
NoSuchMethodException rootException;
try {
Method findBootstrapClassOrNull = ClassLoader.class.getDeclaredMethod("findBootstrapClassOrNull", String.class);
findBootstrapClassOrNull.setAccessible(true);
return findBootstrapClassOrNull;
} catch (NoSuchMethodException ex) {
rootException = ex;
}
try {
// for openjdk6
Method findBootstrapClass0 = ClassLoader.class.getDeclaredMethod("findBootstrapClass0", String.class);
findBootstrapClass0.setAccessible(true);
return findBootstrapClass0;
} catch (NoSuchMethodException ignored) {
// skip
}
throw new IllegalStateException("ClassLoader.findBootstrapClassOrNull api not found", rootException);
}
static {
// preload
new URLEnumeration(null);
}
LauncherBootLoader() {
}
private static URLClassPath getBootstrapClassPath() {
return Launcher.getBootstrapClassPath();
}
@Override
public URL findResource(String name) {
final Resource res = bootstrapClassPath.getResource(name);
if (res == null) {View on GitHub (pinned to 744c3d3075)