pinpoint-apm/pinpoint · error · IllegalStateException
${className} not found
Error message
${className} not found What it means
The private forName() helper in DefaultApplicationContext wraps Class.forName and converts ClassNotFoundException into IllegalStateException('<className> not found'). It is used to locate JDK 9 module-support classes by name, so a missing class aborts agent startup.
Source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/DefaultApplicationContext.java:164
}
private ClassFileTransformer wrapJava9ClassFileTransformer(ClassFileTransformModuleAdaptor classFileTransformer) {
logger.info("initialize Java9ClassFileTransformer");
String moduleWrap = "com.navercorp.pinpoint.bootstrap.java9.module.ClassFileTransformerModuleWrap";
try {
Class<ClassFileTransformer> cftClass = (Class<ClassFileTransformer>) forName(moduleWrap, DefaultApplicationContext.class.getClassLoader());
Constructor<ClassFileTransformer> constructor = cftClass.getDeclaredConstructor(ClassFileTransformModuleAdaptor.class);
return constructor.newInstance(classFileTransformer);
} catch (Exception e) {
throw new IllegalStateException(moduleWrap + " load fail Caused by:" + e.getMessage(), e);
}
}
private Class<?> forName(String className, ClassLoader classLoader) {
try {
return Class.forName(className, false, classLoader);
} catch (ClassNotFoundException e) {
throw new IllegalStateException(className + " not found");
}
}
private ClassFileTransformer wrap(ClassFileTransformer classFileTransformer) {
final boolean enableBytecodeDump = profilerConfig.readBoolean(ASMBytecodeDumpService.ENABLE_BYTECODE_DUMP, ASMBytecodeDumpService.ENABLE_BYTECODE_DUMP_DEFAULT_VALUE);
if (enableBytecodeDump) {
logger.info("wrapBytecodeDumpTransformer");
return BytecodeDumpTransformer.wrap(classFileTransformer, profilerConfig);
}
return classFileTransformer;
}
public ProfilerConfig getProfilerConfig() {
return profilerConfig;
}
public Injector getInjector() {
return injector;View on GitHub (pinned to 744c3d3075)
Solutions
- Deploy the complete official Pinpoint agent distribution for your version
- Confirm the class exists: jar tf bootstrap.jar | grep ClassFileTransformerModuleWrap
- Avoid mixing bootstrap/profiler jars from different releases
- If the class is genuinely absent on your JDK, run on a supported JDK version for the release
Defensive patterns
Strategy: try-catch
Validate before calling
try { Class.forName("com.navercorp.pinpoint.bootstrap.java9.module.ClassFileTransformerModuleWrap", false, loader); } catch (ClassNotFoundException e) { /* class missing — do not take Java9 wrap path */ } Try / catch
try { cls = forName(name, loader); } catch (IllegalStateException e) { logger.error("{} missing from classpath", name); throw e; } Prevention
- Ship full official agent builds only
- List jar contents to verify java9 support classes exist pre-deploy
- Match JDK version to the agent release's supported matrix
When it happens
Trigger: wrapJava9ClassFileTransformer calls forName('com.navercorp.pinpoint.bootstrap.java9.module.ClassFileTransformerModuleWrap', ...) on JDK 9+ while that class is not present in DefaultApplicationContext's classloader (ClassNotFoundException).
Common situations: Incomplete agent deployment missing bootstrap java9 classes, custom slim images, or jar conflicts where an older bootstrap jar shadows the required class.
Related errors
- ${factoryName} not found
- JavaModuleFactory() invoke fail Caused by:${e.getMessage()}
- ${moduleWrap} load fail Caused by:${e.getMessage()}
- initialize fail Caused by:
- invoke fail Caused by:
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/67e8f6e01274e5ab.
Report an issue: GitHub.