pinpoint-apm/pinpoint · error · InstrumentException

not found interceptorHolderClass, className=

Error message

not found interceptorHolderClass, className=

What it means

ASMInterceptorHolder.loadInterceptorClass() loads the interceptor holder class and calls its static get() method. If loadClass() returns null despite being a 'defense code' path, it throws InstrumentException 'not found interceptorHolderClass, className=...'. This means the holder class could not be resolved in the given classloader.

Source

Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMInterceptorHolder.java:91

        this.interceptorId = interceptorId;
        this.className = CLASS_NAME + interceptorId;
        this.innerClassName = className + "$LazyLoading";
    }

    public int getInterceptorId() {
        return interceptorId;
    }

    public String getClassName() {
        return className;
    }

    public Class<? extends Interceptor> loadInterceptorClass(ClassLoader classLoader) throws InstrumentException {
        try {
            final Class<?> clazz = loadClass(classLoader);
            if (clazz == null) {
                // defense code
                throw new InstrumentException("not found interceptorHolderClass, className=" + className);
            }

            final Method method = clazz.getDeclaredMethod("get");
            final Object o = method.invoke(null);
            if (o instanceof Interceptor) {
                return (Class<? extends Interceptor>) o.getClass();
            } else {
                throw new InstrumentException("not found interceptor, className=" + className);
            }
        } catch (InvocationTargetException e) {
            throw new InstrumentException("invocation fail, className=" + className, e);
        } catch (NoSuchMethodException e) {
            throw new InstrumentException("not found 'get' method, className=" + className, e);
        } catch (IllegalAccessException e) {
            throw new InstrumentException("access fail, className=" + className, e);
        }
    }

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Verify the holder class exists in the plugin jar and the className is correct
  2. Check classloader visibility of the holder class in the target application
  3. Redeploy the plugin jar to the agent plugin directory
  4. Read the underlying cause from loadClass to distinguish not-found vs linkage errors
Defensive patterns

Strategy: try-catch

Validate before calling

try {
    Class<?> holder = Class.forName(className, false, classLoader);
    if (holder == null) { /* not loadable */ }
} catch (ClassNotFoundException e) { /* fix packaging */ }

Try / catch

try {
    Class<? extends Interceptor> c = holder.interceptorClass(classLoader);
} catch (InstrumentException e) {
    logger.warn("holder {} not loadable: {}", className, e.getMessage());
}

Prevention

When it happens

Trigger: Calling interceptorClass()/loadInterceptorClass(classLoader) where loadClass(classLoader) returns null for the holder className; class not loadable in the target classloader.

Common situations: Holder class not packaged or not visible to the application classloader; typo in className; plugin jar missing from the agent's plugin directory.

Related errors


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