pinpoint-apm/pinpoint · error · IllegalStateException
LambdaFactoryClassAdaptor initialize fail Caused by
Error message
LambdaFactoryClassAdaptor initialize fail Caused by:${e.getMessage()} What it means
InnerClassLambdaMetafactoryTransformer's constructor reflectively loads LambdaFactoryClassAdaptor from the agent classloader and wires its constructor and loadTransformedBytecode method. Any Exception during this initialization (class not found, no accessible constructor, instantiation failure) is rethrown as IllegalStateException wrapping the original cause.
Solutions
- Check the wrapped cause (e.getCause()) to see whether it is ClassNotFoundException, NoSuchMethodException, or an instantiation failure
- Use a complete, matching pinpoint agent distribution so LambdaFactoryClassAdaptor is present in the agent classloader
- Align plugin/agent versions — rebuild the transformer against the agent version in use
- Verify the agent jar assembly (e.g. maven shading) does not exclude the instrument.lambda package
Defensive patterns
Strategy: try-catch
Validate before calling
try {
Class<?> c = InnerClassLambdaMetafactoryTransformer.class.getClassLoader()
.loadClass("com.navercorp.pinpoint.profiler.instrument.lambda.LambdaFactoryClassAdaptor");
c.getConstructor();
} catch (ReflectiveOperationException e) {
throw new IllegalStateException("agent jar incomplete: LambdaFactoryClassAdaptor unusable", e);
} Type guard
boolean lambdaAdaptorAvailable(ClassLoader cl) {
try { cl.loadClass("com.navercorp.pinpoint.profiler.instrument.lambda.LambdaFactoryClassAdaptor"); return true; }
catch (ClassNotFoundException e) { return false; }
} Try / catch
try {
new InnerClassLambdaMetafactoryTransformer();
} catch (IllegalStateException e) {
logger.error("lambda transformer init failed, cause: {}", e.getCause(), e);
} Prevention
- Ship the full official agent distribution, not a hand-trimmed jar
- Keep agent and plugin versions aligned
- Run agent smoke tests that exercise lambda instrumentation
- Check shaded/assembly excludes do not drop instrument.lambda classes
When it happens
Trigger: The class com.navercorp.pinpoint.profiler.instrument.lambda.LambdaFactoryClassAdaptor is missing from the agent classpath, lacks a no-arg constructor, or its constructor throws; also any reflection failure (SecurityException, InstantiationException).
Common situations: Mismatched agent jar packaging (stripped/partial bootstrap jar); running a plugin against a different Pinpoint agent version where the adaptor class moved or was renamed; custom agent assembly omitting the lambda instrumentation classes.
Related errors
- access fail, className=
- method not found.
- agentDirPath is null
- method not found.
- boot method invoke failed. Error:
AI-assisted analysis of pinpoint-apm/pinpoint@744c3d3075 (2026-09-07).
Data as JSON: /api/errors/2930bb2570388f09.
Report an issue: GitHub.
Appendix: source
Thrown at agent-module/profiler/src/main/java/com/navercorp/pinpoint/profiler/instrument/transformer/InnerClassLambdaMetafactoryTransformer.java:48
*/
public class InnerClassLambdaMetafactoryTransformer implements ClassFileTransformer {
private final Logger logger = LogManager.getLogger(this.getClass());
private static final String InnerClassLambdaMetafactory = "java/lang/invoke/InnerClassLambdaMetafactory";
private final Object lambdaFactoryClassAdaptor;
private final Method transformMethod;
public InnerClassLambdaMetafactoryTransformer() {
try {
final ClassLoader agentClassLoader = InnerClassLambdaMetafactoryTransformer.class.getClassLoader();
final Class<?> lambdaAdaptor = agentClassLoader.loadClass("com.navercorp.pinpoint.profiler.instrument.lambda.LambdaFactoryClassAdaptor");
final Constructor<?> constructor = lambdaAdaptor.getConstructor();
this.lambdaFactoryClassAdaptor = constructor.newInstance();
this.transformMethod = lambdaAdaptor.getMethod("loadTransformedBytecode", byte[].class);
} catch (Exception e) {
throw new IllegalStateException("LambdaFactoryClassAdaptor initialize fail Caused by:" + e.getMessage(), e);
}
}
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
if (!InnerClassLambdaMetafactory.equals(className)) {
return null;
}
try {
logger.debug("transform InnerClassLambdaMetafactory");
final byte[] transformBytecode = (byte[]) transformMethod.invoke(lambdaFactoryClassAdaptor, new Object[]{classfileBuffer});
return transformBytecode;
} catch (Exception e) {
logger.warn("InnerClassLambdaMetafactory transform fail Caused by:" + e.getMessage(), e);
return null;
}
}
}View on GitHub (pinned to 744c3d3075)