pinpoint-apm/pinpoint · error · IllegalArgumentException
functionalInterfaceName must not be empty
Error message
functionalInterfaceName must not be empty
What it means
Constructor guard in LambdaExpressionMatcher: the functionalInterfaceName argument is null or empty, so the matcher cannot build its InterfaceInternalNameMatcherOperand identifying which functional interface the lambda implements.
Solutions
- Supply the functional interface internal name (e.g. 'java/lang/Runnable') when constructing the matcher
- Validate plugin configuration for empty interface names
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java:22 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/c008d46e51415d40.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/LambdaExpressionMatcher.java:22
import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.MatcherOperand;
import com.navercorp.pinpoint.bootstrap.instrument.matcher.operand.PackageInternalNameMatcherOperand;
import com.navercorp.pinpoint.common.util.StringUtils;
import java.util.Objects;
public class LambdaExpressionMatcher implements PackageBasedMatcher {
static final String LAMBDA_INSTANCE_NAME_PREFIX = "$$Lambda$";
private final String basePackageName;
private final MatcherOperand matcherOperand;
public LambdaExpressionMatcher(String baseClassName, String functionalInterfaceName) {
Objects.requireNonNull(baseClassName, "baseClassName");
if (!StringUtils.hasText(baseClassName)) {
throw new IllegalArgumentException("baseClassName must not be empty");
}
Objects.requireNonNull(functionalInterfaceName, "functionalInterfaceName");
if (!StringUtils.hasText(functionalInterfaceName)) {
throw new IllegalArgumentException("functionalInterfaceName must not be empty");
}
this.basePackageName = baseClassName + LAMBDA_INSTANCE_NAME_PREFIX;
final MatcherOperand operand = new PackageInternalNameMatcherOperand(basePackageName);
final MatcherOperand functionalInterfaceMatcherOperand = new InterfaceInternalNameMatcherOperand(functionalInterfaceName, false);
this.matcherOperand = operand.and(functionalInterfaceMatcherOperand);
}
@Override
public String getBasePackageName() {
return this.basePackageName;
}
@Override
public MatcherOperand getMatcherOperand() {
return this.matcherOperand;
}
View on GitHub (pinned to 744c3d3075)