{"record":{"id":"635b3324e7fd790f","repo":"pinpoint-apm/pinpoint","slug":"name-define-fail-caused-by-e-getmessage","errorCode":null,"errorMessage":"${name} define fail Caused by:${e.getMessage()}","messagePattern":"(.+?) define fail Caused by:(.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler-optional/profiler-optional-jdk9/src/main/java/com/navercorp/pinpoint/profiler/instrument/classloading/Java9DefineClass.java","lineNumber":40,"sourceCode":"\n/**\n * @author Woonduk Kang(emeroad)\n */\nfinal class Java9DefineClass implements DefineClass {\n\n    private final Logger logger = LogManager.getLogger(this.getClass());\n\n    @Override\n    public Class<?> defineClass(ClassLoader classLoader, String name, byte[] bytes) {\n        if (logger.isDebugEnabled()) {\n            logger.debug(\"define class:{} cl:{}\", name, classLoader);\n        }\n        final JavaLangAccess javaLangAccess = JavaLangAccessHelper.getJavaLangAccess();\n        try {\n            return javaLangAccess.defineClass(classLoader, name, bytes, null, null);\n        } catch (Throwable e) {\n            logger.warn(\"{} define fail cl:{} Caused by:{}\", name, classLoader, e.getMessage(), e);\n            throw new RuntimeException(name + \" define fail Caused by:\" + e.getMessage(), e);\n        }\n    }\n}\n","sourceCodeStart":22,"sourceCodeEnd":44,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler-optional/profiler-optional-jdk9/src/main/java/com/navercorp/pinpoint/profiler/instrument/classloading/Java9DefineClass.java#L22-L44","documentation":"Java9DefineClass.defineClass uses the shared JavaLangAccess (jdk.internal.misc.SharedSecrets on JDK9+) to inject transformed classes. If JavaLangAccess.defineClass throws any Throwable, it is rethrown as RuntimeException('<name> define fail Caused by:<msg>'). This means the instrumented class could not be defined into the target classloader.","triggerScenarios":"Calling defineClass on Java9DefineClass when javaLangAccess.defineClass(classLoader, name, bytes, null, null) throws (duplicate class name, security manager denial, bad bytecode, wrong classloader, module access restrictions on JDK9+).","commonSituations":"JDK upgrade where JavaLangAccess behavior changed; attempts to define a class already defined; defining into a named module's classloader where package is not open; corrupted/transformed bytecode from instrumentation.","solutions":["Inspect the wrapped cause 'Caused by' to identify the real failure","Verify the class name matches the bytecode being defined","Check the target classloader/module allows defining in that package (add --add-opens if needed)","Ensure the bytecode transformation produced valid class files","Update Pinpoint to a version compatible with your JDK"],"exampleFix":"// before (JDK16+ access failure)\ndefineClass(clazz, bytes); // RuntimeException define fail\n// after: open the package to the agent\njava --add-opens java.base/java.lang=ALL-UNNAMED ...","handlingStrategy":"try-catch","validationCode":"if (clazz == null || bytes == null || bytes.length == 0 || classLoader == null) {\n    throw new IllegalArgumentException(\"invalid defineClass input\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    return javaLangAccess.defineClass(classLoader, name, bytes, null, null);\n} catch (Throwable e) {\n    logger.warn(\"define fail {} cl:{}\", name, classLoader, e);\n    throw new RuntimeException(name + \" define fail Caused by:\" + e.getMessage(), e);\n}","preventionTips":["Always log the full cause chain when defining classes fails","Validate bytecode and class name consistency before defining","Check module/package openness on JDK9+ before defining","Run on a supported JDK/agent combination"],"tags":["java9","instrumentation","classloading","bytecode"],"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"}