{"record":{"id":"06f3b9c51f2218c8","repo":"pinpoint-apm/pinpoint","slug":"invalid-full-qualified-method-name-fullqualified-06f3b9","errorCode":null,"errorMessage":"invalid full qualified method name(${fullQualifiedMethodName}). not found method","messagePattern":"invalid full qualified method name\\((.+?)\\)\\. not found method","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"agent-module/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java","lineNumber":162,"sourceCode":"                            .build());\n        }\n    }\n\n    List<String> filterBasePackageNames(List<String> basePackageNames) {\n        final List<String> list = new ArrayList<>();\n        for (String basePackageName : basePackageNames) {\n            final String name = basePackageName.trim();\n            if (!name.isEmpty()) {\n                list.add(name);\n            }\n        }\n        return list;\n    }\n\n    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    String toMethodName(String fullQualifiedMethodName) {\n        final int methodBeginPosition = fullQualifiedMethodName.lastIndexOf('.');\n        if (methodBeginPosition <= 0 || methodBeginPosition + 1 >= fullQualifiedMethodName.length()) {\n            throw new IllegalArgumentException(\"invalid full qualified method name(\" + fullQualifiedMethodName + \"). not found method\");\n        }\n\n        return fullQualifiedMethodName.substring(methodBeginPosition + 1).trim();\n    }\n\n\n    private void addHandlerInterceptor(final List<String> basePackageNames) {\n        // basepackageNames AND io.vertx.core.Handler\n        final Matcher matcher = Matchers.newPackageBasedMatcher(basePackageNames, new InterfaceInternalNameMatcherOperand(\"io.vertx.core.Handler\", true));","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/agent-module/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java#L144-L180","documentation":"VertxPlugin.toClassName parses a fully qualified method name and returns the class portion (everything before the last dot, trimmed). If the string contains no dot, the input is not a valid fully qualified method name and it throws IllegalArgumentException. This validates Vertx plugin method-target configuration.","triggerScenarios":"A Vertx plugin config entry (transform target expression) lacks a '.' between class and method — e.g. 'io.vertx.core.http.HttpClient' without the method part, or an empty/blank string.","commonSituations":"Misconfigured profiler.plugin.vertx target entries; copy-paste errors dropping the method name; IDE auto-formatting removing part of the expression.","solutions":["Use the full form 'package.Class.method' in Vertx plugin configuration","Check the config source (file/env) for truncated values","Trim stray whitespace so the parsed class name is valid","Add startup-time validation of all configured method expressions"],"exampleFix":"// before\n\"io.vertx.core.http.HttpClient\"\n// after\n\"io.vertx.core.http.HttpClient.request\"","handlingStrategy":"validation","validationCode":"if (fqn == null || fqn.trim().isEmpty() || fqn.lastIndexOf('.') <= 0) {\n    throw new IllegalArgumentException(\"vertx plugin target must be package.Class.method: \" + fqn);\n}","typeGuard":null,"tryCatchPattern":"try {\n    String className = toClassName(fqn);\n} catch (IllegalArgumentException e) {\n    logger.error(\"invalid vertx plugin target '{}'\", fqn, e);\n    throw new PluginSetupException(e);\n}","preventionTips":["Verify Vertx plugin config entries include the method name, not just the class","Normalize whitespace in config values before parsing","Fail fast at agent startup by parsing all configured targets eagerly","Use the message's offending value to locate and fix the bad config entry"],"tags":["configuration","parsing","vertx","plugin"],"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-14T11:17:12.474Z"}