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

  1. Deploy the complete official Pinpoint agent distribution for your version
  2. Confirm the class exists: jar tf bootstrap.jar | grep ClassFileTransformerModuleWrap
  3. Avoid mixing bootstrap/profiler jars from different releases
  4. 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

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


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/67e8f6e01274e5ab. Report an issue: GitHub.