{"record":{"id":"ef4b521a442696b4","repo":"pinpoint-apm/pinpoint","slug":"not-found-field-name-fieldname","errorCode":null,"errorMessage":"Not found field. name=${fieldName}","messagePattern":"Not found field\\. name=(.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java","lineNumber":302,"sourceCode":"                setModified(true);\n            } else if (logger.isDebugEnabled()) {\n                logger.debug(\"Skip addField, accessor already declared. class={}, accessor={}\", getName(), accessorTypeName);\n            }\n        } catch (Exception e) {\n            throw new InstrumentException(\"Failed to add field with accessor [\" + accessorClass.getName() + \"]. Cause:\" + e.getMessage(), e);\n        }\n    }\n\n    @Override\n    public void addGetter(Class<?> getterClass, String fieldName) throws InstrumentException {\n        Objects.requireNonNull(getterClass, \"getterClass\");\n        Objects.requireNonNull(fieldName, \"fieldName\");\n\n        try {\n            final GetterAnalyzer.GetterDetails getterDetails = GetterAnalyzer.instance().analyze(getterClass);\n            final ASMFieldNodeAdapter fieldNode = this.classNode.getField(fieldName, null);\n            if (fieldNode == null) {\n                throw new IllegalArgumentException(\"Not found field. name=\" + fieldName);\n            }\n            Type fieldType = getterDetails.getFieldType();\n            if (!fieldNode.getJavaType().equals(fieldType)) {\n                throw new IllegalArgumentException(\"different return type. return=\" + fieldType + \", field=\" + fieldNode.getJavaType());\n            }\n\n            boolean modified = this.classNode.addGetterMethod(getterDetails.getGetter().getName(), fieldNode);\n            modified |= this.classNode.addInterface(getterClass.getName());\n            if (modified) {\n                setModified(true);\n            } else if (logger.isDebugEnabled()) {\n                logger.debug(\"Skip addGetter, getter already declared. class={}, getter={}\", getName(), getterClass.getName());\n            }\n        } catch (Exception e) {\n            throw new InstrumentException(\"Failed to add getter: \" + getterClass.getName(), e);\n        }\n    }\n","sourceCodeStart":284,"sourceCodeEnd":320,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java#L284-L320","documentation":"Thrown by ASMClass.addGetter when the target class does not contain a field with the requested name. It fires when a plugin calls addGetter with a fieldName that was never declared (or not yet added via addField) on the instrumented class, so bytecode instrumentation cannot generate a getter against a nonexistent field. The input at fault is the fieldName argument; callers should ensure addField (or the target's own definition) declares the field before requesting a getter, and wrap the call in error handling for InstrumentException.","triggerScenarios":"Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/ASMClass.java:302 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Use the actual field name declared on the target class","Check spelling/case of fieldName in the plugin's getter binding","Ensure the field exists before addGetter is invoked"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"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"}