{"record":{"id":"6f3983c0395fab66","repo":"pinpoint-apm/pinpoint","slug":"not-found-interceptorholderclass-classname","errorCode":null,"errorMessage":"not found interceptorHolderClass, className=","messagePattern":"not found interceptorHolderClass, className=","errorType":"exception","errorClass":"InstrumentException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMInterceptorHolder.java","lineNumber":91,"sourceCode":"        this.interceptorId = interceptorId;\n        this.className = CLASS_NAME + interceptorId;\n        this.innerClassName = className + \"$LazyLoading\";\n    }\n\n    public int getInterceptorId() {\n        return interceptorId;\n    }\n\n    public String getClassName() {\n        return className;\n    }\n\n    public Class<? extends Interceptor> loadInterceptorClass(ClassLoader classLoader) throws InstrumentException {\n        try {\n            final Class<?> clazz = loadClass(classLoader);\n            if (clazz == null) {\n                // defense code\n                throw new InstrumentException(\"not found interceptorHolderClass, className=\" + className);\n            }\n\n            final Method method = clazz.getDeclaredMethod(\"get\");\n            final Object o = method.invoke(null);\n            if (o instanceof Interceptor) {\n                return (Class<? extends Interceptor>) o.getClass();\n            } else {\n                throw new InstrumentException(\"not found interceptor, className=\" + className);\n            }\n        } catch (InvocationTargetException e) {\n            throw new InstrumentException(\"invocation fail, className=\" + className, e);\n        } catch (NoSuchMethodException e) {\n            throw new InstrumentException(\"not found 'get' method, className=\" + className, e);\n        } catch (IllegalAccessException e) {\n            throw new InstrumentException(\"access fail, className=\" + className, e);\n        }\n    }\n","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMInterceptorHolder.java#L73-L109","documentation":"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.","triggerScenarios":"Calling interceptorClass()/loadInterceptorClass(classLoader) where loadClass(classLoader) returns null for the holder className; class not loadable in the target classloader.","commonSituations":"Holder class not packaged or not visible to the application classloader; typo in className; plugin jar missing from the agent's plugin directory.","solutions":["Verify the holder class exists in the plugin jar and the className is correct","Check classloader visibility of the holder class in the target application","Redeploy the plugin jar to the agent plugin directory","Read the underlying cause from loadClass to distinguish not-found vs linkage errors"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"try {\n    Class<?> holder = Class.forName(className, false, classLoader);\n    if (holder == null) { /* not loadable */ }\n} catch (ClassNotFoundException e) { /* fix packaging */ }","typeGuard":null,"tryCatchPattern":"try {\n    Class<? extends Interceptor> c = holder.interceptorClass(classLoader);\n} catch (InstrumentException e) {\n    logger.warn(\"holder {} not loadable: {}\", className, e.getMessage());\n}","preventionTips":["Package holder classes in the plugin jar","Use constants for holder class names","Test classloading in an environment mirroring production classloader layout"],"tags":["java","classloading","interceptor"],"backgroundTag":"class-not-found","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}