pinpoint-apm/pinpoint · warning
Ignore class file transformer
Error message
Ignore class file transformer {} What it means
WARN log in ClassFileTransformerProvider.getMatchableTransformers: a ClassFileTransformer from the injected transformer list does not implement MatchableClassFileTransformer (getMatcher() unavailable), so it cannot be wrapped for targeted matching and is skipped. The agent registers only matchable transformers so bytecode transformation is limited to classes that actually match.
Solutions
- Implement MatchableClassFileTransformer (provide getMatcher()) in the custom transformer instead of plain ClassFileTransformer.
- Check the plugin's Pinpoint version compatibility and upgrade/rebuild it.
- Verify the transformer list wiring in the DI configuration; remove transformers that are intentionally non-matchable.
Example fix
// before
public class MyTransformer implements ClassFileTransformer { ... }
// after
public class MyTransformer implements MatchableClassFileTransformer {
public ClassMatcher getMatcher() { return new DefaultClassNameMatcher(Arrays.asList("com.example.Target")); }
...
} Defensive patterns
Strategy: type-guard
Validate before calling
if (!(transformer instanceof MatchableClassFileTransformer)) {
throw new IllegalArgumentException(transformer + " must implement MatchableClassFileTransformer");
} Type guard
boolean isMatchable(Object t) {
return t instanceof MatchableClassFileTransformer;
} Prevention
- Always implement MatchableClassFileTransformer for Pinpoint plugins.
- Keep plugin builds aligned with the agent's Pinpoint version.
- Log/verify the registered transformer list at startup in tests.
When it happens
Trigger: A transformer in the provided transformer list is not an instance of MatchableClassFileTransformer (or wrap() returned null), so it is dropped during agent startup.
Common situations: A custom or third-party plugin registers a plain ClassFileTransformer incompatible with Pinpoint's transformer registry; plugin built against an older Pinpoint API before the Matchable interface.
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- Transformer already exist. className
- unknown operator. operator=
- unsupported matcher
- Agent already started.
- Cannot add setter to final field. setterMethod
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/86a458761da24bfc.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/ClassFileTransformerProvider.java:162
return new MatchableTransformerRegistry(this.instrumentMatcherCacheConfig, matchableClassFileTransformerList);
}
return new DefaultTransformerRegistry(matchableClassFileTransformerList);
}
private List<MatchableClassFileTransformer> getMatchableTransformers(PluginContextLoadResult pluginContexts) {
Objects.requireNonNull(pluginContexts, "pluginContexts");
final List<MatchableClassFileTransformer> matcherList = new ArrayList<>();
for (ClassFileTransformer transformer : pluginContexts.getClassFileTransformer()) {
if (transformer instanceof MatchableClassFileTransformer) {
final MatchableClassFileTransformer t = (MatchableClassFileTransformer) transformer;
if (logger.isInfoEnabled()) {
logger.info("Registering class file transformer {} for {} ", t, t.getMatcher());
}
matcherList.add(t);
} else {
if (logger.isWarnEnabled()) {
logger.warn("Ignore class file transformer {}", transformer);
}
}
}
return matcherList;
}
}View on GitHub (pinned to 744c3d3075)