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
- Pass a non-empty separator such as '/' (or use the two-arg constructor / DEFAULT_PATH_SEAPARATOR)
- Pass null explicitly if you want the default separator instead of an empty string
- 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)