pinpoint-apm/pinpoint · error · IllegalArgumentException
invalid full qualified method name(). not found method
Error message
invalid full qualified method name(). not found method
What it means
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.
Source
Thrown at agent-module/plugins/akka-http/src/main/java/com/navercorp/pinpoint/plugin/akka/http/AkkaHttpPlugin.java:83
logger.warn("Not found 'profiler.akka.http.transform.targetname' in config");
} else {
try {
final String className = toClassName(transformTargetName);
final String methodName = DirectivesTransform.toMethodName(transformTargetName);
logger.info("Add request handler method for Akka HTTP Server. class={}, method={}", className, methodName);
transformDirectives(className);
transformRequestContext();
transformHttpRequest();
} catch (IllegalArgumentException e) {
logger.warn("can't find target '{}' value={}", AkkaHttpConfig.KEY_TRANSFORM_TARGET_NAME, transformTargetName);
}
}
}
private String toClassName(String fullQualifiedMethodName) {
final int classEndPosition = fullQualifiedMethodName.lastIndexOf('.');
if (classEndPosition <= 0) {
throw new IllegalArgumentException("invalid full qualified method name(" + fullQualifiedMethodName + "). not found method");
}
return fullQualifiedMethodName.substring(0, classEndPosition).trim();
}
private void transformDirectives(String clazzName) {
transformTemplate.transform(clazzName, DirectivesTransform.class);
}
public static class DirectivesTransform implements TransformCallback {
private final PluginLogger logger = PluginLogManager.getLogger(this.getClass());
@Override
public byte[] doInTransform(Instrumentor instrumentor, ClassLoader classLoader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws InstrumentException {
final InstrumentClass target = instrumentor.getInstrumentClass(classLoader, className, classfileBuffer);
final AkkaHttpConfig config = new AkkaHttpConfig(instrumentor.getProfilerConfig());
final String transformTargetName = config.getTransformTargetName();View on GitHub (pinned to 744c3d3075)
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
Example fix
// before (config) instrument.directive = akka.http.scaladsl.server.Directive // after instrument.directive = akka.http.scaladsl.server.Directive.asComplete
Defensive patterns
Strategy: validation
Validate before calling
static String requireFqmn(String v) {
if (v == null || v.lastIndexOf('.') <= 0)
throw new IllegalArgumentException("expected full qualified method name, got: " + v);
return v;
} Prevention
- 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
When it happens
Trigger: 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'.
Common situations: 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.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- service type name must not be empty
- Invalid type provider definition :
- annotationKey name must not be empty
- matcher type must not be empty
- Unknown matcher type :
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/2772f976a2788df9.
Report an issue: GitHub.