{"record":{"id":"f3b886c69fa87a28","repo":"pinpoint-apm/pinpoint","slug":"filter-resolve-fail","errorCode":null,"errorMessage":"filter resolve fail:","messagePattern":"filter resolve fail:","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":500,"severity":"error","filePath":"web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java","lineNumber":182,"sourceCode":"        if (includeUser(fromServiceDescList) && includeWas(toServiceDescList)) {\n            return new UserToWasFilter(spanResponseConditionFilter, acceptURLFilter);\n        }\n        if (includeWas(fromServiceDescList) && includeUnknown(toServiceDescList)) {\n            return new WasToUnknownFilter(spanEventResponseConditionFilter, rpcUrlFilter);\n        }\n        if (includeWas(fromServiceDescList) && includeQueue(toServiceDescList)) {\n            return new WasToQueueFilter(spanEventResponseConditionFilter);\n        }\n        if (includeQueue(fromServiceDescList) && includeWas(toServiceDescList)) {\n            return new QueueToWasFilter(spanResponseConditionFilter, acceptURLFilter);\n        }\n        // TODO toServiceDescList check logic not exist.\n//        if (includeWas(fromServiceDescList) && isBackEnd????()) {\n        if (includeWas(fromServiceDescList)) {\n            return new WasToBackendFilter(spanEventResponseConditionFilter);\n        }\n        logger.warn(\"unsupported filter type:{}\", this);\n        throw new IllegalArgumentException(\"filter resolve fail:\" + this);\n    }\n\n\n    @Override\n    public boolean include(List<SpanBo> transaction) {\n        SpanContext spanContext = new SpanContext(transaction, serviceTypeRegistryService);\n\n        final String fromServiceName = fromNode.getServiceName();\n        final String fromApplicationName = fromNode.getApplicationName();\n\n        final String toServiceName = toNode.getServiceName();\n        final String toApplicationName = toNode.getApplicationName();\n\n        LinkContext linkContext = new LinkContext(spanContext,\n                fromServiceName, fromApplicationName, fromServiceDescList, fromAgentFilter,\n                toServiceName, toApplicationName, toServiceDescList, toAgentFilter);\n        return filter.include(linkContext);\n    }","sourceCodeStart":164,"sourceCodeEnd":200,"githubUrl":"https://github.com/pinpoint-apm/pinpoint/blob/744c3d3075e595656abb1ae331ad2c0e4c9eb996/web/src/main/java/com/navercorp/pinpoint/web/filter/LinkFilter.java#L164-L200","documentation":"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.","triggerScenarios":"Same conditions as the warning: fromServiceDescList has no WAS entries, so after the warning the method throws 'filter resolve fail:'.","commonSituations":"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.","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"],"exampleFix":"// before\nFilter filter = new LinkFilter(fromDesc, toDesc, registry);\n// after\ntry {\n    Filter filter = new LinkFilter(fromDesc, toDesc, registry);\n} catch (IllegalArgumentException e) {\n    throw new BadRequestException(\"Filtering is not supported for this link: \" + e.getMessage());\n}","handlingStrategy":"try-catch","validationCode":"boolean wasSource = fromServiceDescList.stream()\n    .anyMatch(d -> d.getServiceType().isWas());\nif (!wasSource) {\n    throw new UnsupportedOperationException(\"Filter resolve will fail: no WAS in source descriptors\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    LinkFilter filter = new LinkFilter(fromDesc, toDesc, registry);\n    return filterChain.include(transaction);\n} catch (IllegalArgumentException e) {\n    logger.warn(\"link filter unsupported: {}\", e.getMessage());\n    return false;\n}","preventionTips":["Validate service descriptor lists before constructing filters","Catch IllegalArgumentException at the filter-construction boundary","Keep WAS service type registration correct"],"tags":["pinpoint","filter","illegal-argument"],"backgroundTag":"invalid-argument-value","analyzedSha":"744c3d3075e595656abb1ae331ad2c0e4c9eb996","analyzedAt":"2026-09-07T18:48:45.289Z","contentChangedAt":"2026-09-07T18:48:45.289Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}