OpenLineage connector fails with NoClassDefFoundError for Jackson Blackbird class
Author: Dilli-Babu-GodariCreated Sep 9, 2026Updated Sep 9, 2026
Labelsbug
Description
While testing the OpenLineage changes locally, I first ran the existing master branch to verify the baseline behavior.
Even without any changes from my branch, I encountered the following error when running Presto locally on the master node. The failure occurs when the OpenLineage event listener processes a completed query.
Error
java.lang.InternalError: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/blackbird/ser/ToBooleanFunction
at java.base/java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:413)
at java.base/java.lang.invoke.InnerClassLambdaMetafactory.spinInnerClass(InnerClassLambdaMetafactory.java:315)
at java.base/java.lang.invoke.InnerClassLambdaMetafactory.buildCallSite(InnerClassLambdaMetafactory.java:228)
at java.base/java.lang.invoke.LambdaMetafactory.metafactory(LambdaMetafactory.java:341)
at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.createProperty(BBSerializerModifier.java:133)
at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.lambda$findProperties$0(BBSerializerModifier.java:67)
at com.fasterxml.jackson.module.blackbird.util.Unchecked.lambda$runnable$0(Unchecked.java:31)
at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.findProperties(BBSerializerModifier.java:68)
at com.fasterxml.jackson.module.blackbird.ser.BBSerializerModifier.changeProperties(BBSerializerModifier.java:52)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.constructBeanOrAddOnSerializer(BeanSerializerFactory.java:415)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.findBeanOrAddOnSerializer(BeanSerializerFactory.java:295)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory._createSerializer2(BeanSerializerFactory.java:240)
at com.fasterxml.jackson.databind.ser.BeanSerializerFactory.createSerializer(BeanSerializerFactory.java:174)
at com.fasterxml.jackson.databind.SerializerProvider._createUntypedSerializer(SerializerProvider.java:1535)
at com.fasterxml.jackson.databind.SerializerProvider._createAndCacheUntypedSerializer(SerializerProvider.java:1483)
at com.fasterxml.jackson.databind.SerializerProvider.findValueSerializer(SerializerProvider.java:585)
at com.fasterxml.jackson.databind.SerializerProvider.findTypedValueSerializer(SerializerProvider.java:868)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:330)
at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:4630)
at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:4583)
at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.getPrestoQueryStatisticsFacet(OpenLineageEventListener.java:201)
at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.getCompletedEvent(OpenLineageEventListener.java:243)
at com.facebook.presto.plugin.openlineage.OpenLineageEventListener.queryCompleted(OpenLineageEventListener.java:109)
at com.facebook.presto.eventlistener.EventListenerManager.lambda$queryCompleted$0(EventListenerManager.java:142)
at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:422)
at com.facebook.presto.eventlistener.EventListenerManager.queryCompleted(EventListenerManager.java:142)
at com.facebook.presto.event.QueryMonitor.queryCompletedEvent(QueryMonitor.java:300)
at com.facebook.presto.execution.SqlQueryManager.lambda$createQuery$5(SqlQueryManager.java:314)
at com.facebook.presto.execution.QueryStateMachine.lambda$addQueryInfoStateChangeListener$20(QueryStateMachine.java:1074)
at com.facebook.presto.execution.StateMachine.fireStateChangedListener(StateMachine.java:228)
at com.facebook.presto.execution.StateMachine.lambda$fireStateChanged$0(StateMachine.java:220)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NoClassDefFoundError: com/fasterxml/jackson/module/blackbird/ser/ToBooleanFunction
at java.base/java.lang.ClassLoader.defineClass0(Native Method)
at java.base/java.lang.System$2.defineClass(System.java:2324)
at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClass(MethodHandles.java:2439)
at java.base/java.lang.invoke.MethodHandles$Lookup$ClassDefiner.defineClassAsLookup(MethodHandles.java:2420)
at java.base/java.lang.invoke.MethodHandles$Lookup.defineHiddenClass(MethodHandles.java:2127)
at java.base/java.lang.invoke.InnerClassLambdaMetafactory.generateInnerClass(InnerClassLambdaMetafactory.java:407)
... 33 more
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.module.blackbird.ser.ToBooleanFunction
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:525)
... 39 moreObserved behavior
The query itself reaches completion, but the OpenLineage event listener encounters the exception while processing the completed query.
The relevant call path is:
OpenLineageEventListener.queryCompleted()
-> OpenLineageEventListener.getCompletedEvent()
-> OpenLineageEventListener.getPrestoQueryStatisticsFacet()
-> ObjectMapper.convertValue()
-> Jackson Blackbird serialization
-> NoClassDefFoundError: ToBooleanFunctionI have registered the event-listener using this,
event-listener.name=openlineage-event-listener
openlineage-event-listener.transport.type=CONSOLE
openlineage-event-listener.presto.uri=http://localhost:8080Expected behavior
The OpenLineage event listener should successfully process the completed query without throwing a NoClassDefFoundError.
cc @imjalpreet
Source: prestodb/presto