pinpoint-apm/pinpoint · error · IllegalArgumentException

invalid full qualified method name(${fullQualifiedMethodName

Error message

invalid full qualified method name(${fullQualifiedMethodName}). not found method

What it means

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.

Source

Thrown at agent-module/plugins/vertx/src/main/java/com/navercorp/pinpoint/plugin/vertx/VertxPlugin.java:162

                            .build());
        }
    }

    List<String> filterBasePackageNames(List<String> basePackageNames) {
        final List<String> list = new ArrayList<>();
        for (String basePackageName : basePackageNames) {
            final String name = basePackageName.trim();
            if (!name.isEmpty()) {
                list.add(name);
            }
        }
        return list;
    }

    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();
    }

    String toMethodName(String fullQualifiedMethodName) {
        final int methodBeginPosition = fullQualifiedMethodName.lastIndexOf('.');
        if (methodBeginPosition <= 0 || methodBeginPosition + 1 >= fullQualifiedMethodName.length()) {
            throw new IllegalArgumentException("invalid full qualified method name(" + fullQualifiedMethodName + "). not found method");
        }

        return fullQualifiedMethodName.substring(methodBeginPosition + 1).trim();
    }


    private void addHandlerInterceptor(final List<String> basePackageNames) {
        // basepackageNames AND io.vertx.core.Handler
        final Matcher matcher = Matchers.newPackageBasedMatcher(basePackageNames, new InterfaceInternalNameMatcherOperand("io.vertx.core.Handler", true));

View on GitHub (pinned to 744c3d3075)

Solutions

  1. Use the full form 'package.Class.method' in Vertx plugin configuration
  2. Check the config source (file/env) for truncated values
  3. Trim stray whitespace so the parsed class name is valid
  4. Add startup-time validation of all configured method expressions

Example fix

// before
"io.vertx.core.http.HttpClient"
// after
"io.vertx.core.http.HttpClient.request"
Defensive patterns

Strategy: validation

Validate before calling

if (fqn == null || fqn.trim().isEmpty() || fqn.lastIndexOf('.') <= 0) {
    throw new IllegalArgumentException("vertx plugin target must be package.Class.method: " + fqn);
}

Try / catch

try {
    String className = toClassName(fqn);
} catch (IllegalArgumentException e) {
    logger.error("invalid vertx plugin target '{}'", fqn, e);
    throw new PluginSetupException(e);
}

Prevention

When it happens

Trigger: 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.

Common situations: Misconfigured profiler.plugin.vertx target entries; copy-paste errors dropping the method name; IDE auto-formatting removing part of the expression.

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


AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07). Data as JSON: /api/errors/06f3b9c51f2218c8. Report an issue: GitHub.