{"record":{"id":"2772f976a2788df9","repo":"pinpoint-apm/pinpoint","slug":"invalid-full-qualified-method-name-not-found-me","errorCode":null,"errorMessage":"invalid full qualified method name(). not found method","messagePattern":"invalid full qualified method name\\(\\)\\. not found method","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/plugins/akka-http/src/main/java/com/navercorp/pinpoint/plugin/akka/http/AkkaHttpPlugin.java","lineNumber":83,"sourceCode":"            logger.warn(\"Not found 'profiler.akka.http.transform.targetname' in config\");\n        } else {\n            try {\n                final String className = toClassName(transformTargetName);\n                final String methodName = DirectivesTransform.toMethodName(transformTargetName);\n                logger.info(\"Add request handler method for Akka HTTP Server. class={}, method={}\", className, methodName);\n                transformDirectives(className);\n                transformRequestContext();\n                transformHttpRequest();\n            } catch (IllegalArgumentException e) {\n                logger.warn(\"can't find target '{}' value={}\", AkkaHttpConfig.KEY_TRANSFORM_TARGET_NAME, transformTargetName);\n            }\n        }\n    }\n\n    private String toClassName(String fullQualifiedMethodName) {\n        final int classEndPosition = fullQualifiedMethodName.lastIndexOf('.');\n        if (classEndPosition <= 0) {\n            throw new IllegalArgumentException(\"invalid full qualified method name(\" + fullQualifiedMethodName + \"). not found method\");\n        }\n\n        return fullQualifiedMethodName.substring(0, classEndPosition).trim();\n    }\n\n    private void transformDirectives(String clazzName) {\n        transformTemplate.transform(clazzName, DirectivesTransform.class);\n    }\n\n    public static class DirectivesTransform implements TransformCallback {\n\n        private final PluginLogger logger = PluginLogManager.getLogger(this.getClass());\n\n        @Override\n        public byte[] doInTransform(Instrumentor instrumentor, ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {\n            final InstrumentClass target = instrumentor.getInstrumentClass(classLoader, className, classfileBuffer);\n            final AkkaHttpConfig config = new AkkaHttpConfig(instrumentor.getProfilerConfig());\n            final String transformTargetName = config.getTransformTargetName();","sourceCodeStart":65,"sourceCodeEnd":101,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins/akka-http/src/main/java/com/navercorp/pinpoint/plugin/akka/http/AkkaHttpPlugin.java#L65-L101","documentation":"AkkaHttpPlugin.toClassName(fullQualifiedMethodName) derives the class name from a fully-qualified method name by splitting at the last '.'. If there is no '.' at position > 0 (no method part present), the string is not a valid FQMN and an IllegalArgumentException is thrown.","triggerScenarios":"Configuration supplies an interceptor class target as a bare class name (e.g. 'akka.http.scaladsl.server.Directive') or an otherwise dot-less string instead of 'com.example.Class.method'.","commonSituations":"Misconfigured akka-http plugin options where users provide class names rather than fully qualified method names; copy-pasting a class FQN into a method config field.","solutions":["Supply the full qualified METHOD name: 'package.Class.method', not just the class","Check the plugin config key expects a method (some keys take classes)","Escape/quote the value correctly in the agent config if it contains special characters","Add a startup check that each configured value contains a '.' after the class package"],"exampleFix":"// before (config)\ninstrument.directive = akka.http.scaladsl.server.Directive\n// after\ninstrument.directive = akka.http.scaladsl.server.Directive.asComplete","handlingStrategy":"validation","validationCode":"static String requireFqmn(String v) {\n    if (v == null || v.lastIndexOf('.') <= 0)\n        throw new IllegalArgumentException(\"expected full qualified method name, got: \" + v);\n    return v;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Configure full qualified method names (package.Class.method), never bare class names","Sanitize/trim plugin option values at load time","Document which config keys expect methods vs classes"],"tags":["config","string-parsing","plugin","akka-http"],"backgroundTag":"invalid-argument-format","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"}