pinpoint-apm/pinpoint · error · IllegalArgumentException

pathSeparator must not be empty

Error message

pathSeparator must not be empty

What it means

Constructor guard in ExcludePathFilter: the pathSeparator argument used to split the exclusion pattern string is empty or null, so the exclusion patterns cannot be tokenized. The offending input is the caller-supplied separator (not the default '/').

Solutions

  1. Pass a non-empty separator such as '/' (or use the two-arg constructor / DEFAULT_PATH_SEAPARATOR)
  2. Pass null explicitly if you want the default separator instead of an empty string
  3. Validate configuration strings before constructing the filter
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/config/ExcludePathFilter.java:51 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/355f438af76ce405. Report an issue: GitHub.

Appendix: source

Thrown at agent-module/bootstraps/bootstrap-core/src/main/java/com/navercorp/pinpoint/bootstrap/config/ExcludePathFilter.java:51

 */
public class ExcludePathFilter implements Filter<String> {

    public static final String DEFAULT_PATH_SEAPARATOR = "/";
    public static final String DEFAULT_FORMAT_SEPARATOR = ",";

    protected final PathMatcher[] excludePathMatchers;

    public ExcludePathFilter(String excludePathFormatString) {
        this(excludePathFormatString, DEFAULT_PATH_SEAPARATOR);
    }

    public ExcludePathFilter(String excludePathFormatString, String pathSeparator) {
        this(excludePathFormatString, pathSeparator, DEFAULT_FORMAT_SEPARATOR);
    }

    public ExcludePathFilter(String excludePathFormatString, String pathSeparator, String formatSeparator) {
        if (StringUtils.isEmpty(pathSeparator)) {
            throw new IllegalArgumentException("pathSeparator must not be empty");
        }
        if (StringUtils.isEmpty(excludePathFormatString)) {
            this.excludePathMatchers = new PathMatcher[0];
            return;
        }
        final List<String> excludePathFormats = StringUtils.tokenizeToStringList(excludePathFormatString, formatSeparator);
        final List<PathMatcher> excludePathMatchers = new ArrayList<>(excludePathFormats.size());
        for (String excludePathFormat : excludePathFormats) {
            final PathMatcher pathMatcher = createPathMatcher(excludePathFormat, pathSeparator);
            excludePathMatchers.add(pathMatcher);
        }
        this.excludePathMatchers = toArray(excludePathMatchers);
    }

    public PathMatcher[] toArray(Collection<PathMatcher> collection) {
        Objects.requireNonNull(collection, "collection");

        return collection.toArray(new PathMatcher[0]);

View on GitHub (pinned to 744c3d3075)