pinpoint-apm/pinpoint · error · IllegalStateException
operand is null
Error message
operand is null
What it means
Guard in DefaultMultiClassBasedMatcher.getMatcherOperand: joining the class-name matcher operands produced null (no valid operand could be derived from baseClassNames), so the matcher cannot be assembled. It indicates the operand-building helper returned null for the given inputs.
Solutions
- Verify baseClassNames entries are non-empty valid class names
- Avoid passing only blank/null entries that collapse the OR-join to null
- Upgrade the pinpoint agent version in case of a matcher operand building bug
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/DefaultMultiClassBasedMatcher.java:49 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/a680d2e4c1b7efcb.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/instrument/matcher/DefaultMultiClassBasedMatcher.java:49
private final MatcherOperand matcherOperand;
DefaultMultiClassBasedMatcher(final List<String> baseClassNames) {
this(baseClassNames, null);
}
DefaultMultiClassBasedMatcher(final List<String> baseClassNames, final MatcherOperand additional) {
if (CollectionUtils.isEmpty(baseClassNames)) {
throw new IllegalArgumentException("basePackageNames must not be empty");
}
this.baseClassNames = baseClassNames;
this.matcherOperand = getMatcherOperand(baseClassNames, additional);
}
private MatcherOperand getMatcherOperand(List<String> baseClassNames, MatcherOperand additional) {
MatcherOperand operand = joinOr(baseClassNames);
if (operand == null) {
throw new IllegalStateException("operand is null");
}
if (additional == null) {
return operand;
}
// (class OR ...) AND additional
operand = operand.and(additional);
return operand;
}
private MatcherOperand joinOr(List<String> baseClassNames) {
MatcherOperand operand = null;
for (String baseClassName : baseClassNames) {
if (operand == null) {
operand = new ClassInternalNameMatcherOperand(baseClassName);
} else {
// class OR ...
final MatcherOperand classMatcherOperand = new ClassInternalNameMatcherOperand(baseClassName);
operand = operand.or(classMatcherOperand);View on GitHub (pinned to 744c3d3075)