pinpoint-apm/pinpoint · error · IllegalArgumentException
filter resolve fail:
Error message
filter resolve fail:
What it means
This is the IllegalArgumentException thrown immediately after the 'unsupported filter type' warning in LinkFilter.resolveLinkFilter when no filter strategy matches the from/to service descriptors. It propagates to the caller that attempted to construct the LinkFilter.
Solutions
- Catch IllegalArgumentException around LinkFilter construction and surface a user-friendly message
- Ensure the link being filtered originates from a WAS application
- Correct service type registration so the source application classifies as WAS
- Add an explicit unsupported-combination check before constructing the filter
Example fix
// before
Filter filter = new LinkFilter(fromDesc, toDesc, registry);
// after
try {
Filter filter = new LinkFilter(fromDesc, toDesc, registry);
} catch (IllegalArgumentException e) {
throw new BadRequestException("Filtering is not supported for this link: " + e.getMessage());
} Defensive patterns
Strategy: try-catch
Validate before calling
boolean wasSource = fromServiceDescList.stream()
.anyMatch(d -> d.getServiceType().isWas());
if (!wasSource) {
throw new UnsupportedOperationException("Filter resolve will fail: no WAS in source descriptors");
} Try / catch
try {
LinkFilter filter = new LinkFilter(fromDesc, toDesc, registry);
return filterChain.include(transaction);
} catch (IllegalArgumentException e) {
logger.warn("link filter unsupported: {}", e.getMessage());
return false;
} Prevention
- Validate service descriptor lists before constructing filters
- Catch IllegalArgumentException at the filter-construction boundary
- Keep WAS service type registration correct
When it happens
Trigger: Same conditions as the warning: fromServiceDescList has no WAS entries, so after the warning the method throws 'filter resolve fail:'.
Common situations: Filtering a backend-to-backend or RPC-to-RPC link from the topology UI; deserialized filter configs referencing service types that no longer resolve to WAS.
Understand the failure class
Background: "Must be a positive integer", "Invalid value", "Unsupported": the invalid-argument-value error family, when a library rejects the value you pass — this error's family across 35 libraries.
Related errors
- unsupported filter type
- application serviceType not found. code:, name:
- negative tick
- agentStartTimeIndex not found
- AnnotationKey code of
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/f3b886c69fa87a28.
Report an issue: GitHub.
Appendix: source
Thrown at web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java:182
if (includeUser(fromServiceDescList) && includeWas(toServiceDescList)) {
return new UserToWasFilter(spanResponseConditionFilter, acceptURLFilter);
}
if (includeWas(fromServiceDescList) && includeUnknown(toServiceDescList)) {
return new WasToUnknownFilter(spanEventResponseConditionFilter, rpcUrlFilter);
}
if (includeWas(fromServiceDescList) && includeQueue(toServiceDescList)) {
return new WasToQueueFilter(spanEventResponseConditionFilter);
}
if (includeQueue(fromServiceDescList) && includeWas(toServiceDescList)) {
return new QueueToWasFilter(spanResponseConditionFilter, acceptURLFilter);
}
// TODO toServiceDescList check logic not exist.
// if (includeWas(fromServiceDescList) && isBackEnd????()) {
if (includeWas(fromServiceDescList)) {
return new WasToBackendFilter(spanEventResponseConditionFilter);
}
logger.warn("unsupported filter type:{}", this);
throw new IllegalArgumentException("filter resolve fail:" + this);
}
@Override
public boolean include(List<SpanBo> transaction) {
SpanContext spanContext = new SpanContext(transaction, serviceTypeRegistryService);
final String fromServiceName = fromNode.getServiceName();
final String fromApplicationName = fromNode.getApplicationName();
final String toServiceName = toNode.getServiceName();
final String toApplicationName = toNode.getApplicationName();
LinkContext linkContext = new LinkContext(spanContext,
fromServiceName, fromApplicationName, fromServiceDescList, fromAgentFilter,
toServiceName, toApplicationName, toServiceDescList, toAgentFilter);
return filter.include(linkContext);
}View on GitHub (pinned to 744c3d3075)