Axual / ksml

Kafka Streams for Low Code Environments
Apache License 2.0
25 stars 9 forks source link

"NoClassDefFoundError: javax/ws/rs/core/UriBuilder" when running the demo runner #37

Closed lawcha closed 2 years ago

lawcha commented 2 years ago

I followed the Getting Started tutorial to run the first example YAML, but I get the following error when executing the run.sh file.

2022-04-26T14:03:09,753Z [system] [pool-4-thread-1] INFO  i.a.k.r.backend.kafka.KafkaBackend -
                Starting Kafka Backend
2022-04-26T14:03:10,053Z [system] [io.ksml.example.processor-00d39059-38f3-4371-b2f6-09c570d8005d-StreamThread-1] ERROR o.apache.kafka.streams.KafkaStreams -
                stream-client [io.ksml.example.processor-00d39059-38f3-4371-b2f6-09c570d8005d] Encountered the following exception during processing and the registered exception handler opted to SHUTDOWN_CLIENT. The streams client is going to shut down now.
java.lang.NoClassDefFoundError: javax/ws/rs/core/UriBuilder
        at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:656)
        at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:642)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaByIdFromRegistry(CachedSchemaRegistryClient.java:217)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaBySubjectAndId(CachedSchemaRegistryClient.java:291)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaById(CachedSchemaRegistryClient.java:276)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer$DeserializationContext.schemaFromRegistry(AbstractKafkaAvroDeserializer.java:273)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:97)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:76)
        at io.confluent.kafka.serializers.KafkaAvroDeserializer.deserialize(KafkaAvroDeserializer.java:55)
        at io.axual.ksml.notation.AvroNotation$AvroSerde$2.deserialize(AvroNotation.java:77)
        at org.apache.kafka.common.serialization.Deserializer.deserialize(Deserializer.java:60)
        at org.apache.kafka.streams.processor.internals.SourceNode.deserializeValue(SourceNode.java:58)
        at org.apache.kafka.streams.processor.internals.RecordDeserializer.deserialize(RecordDeserializer.java:66)
        at org.apache.kafka.streams.processor.internals.RecordQueue.updateHead(RecordQueue.java:176)
        at org.apache.kafka.streams.processor.internals.RecordQueue.addRawRecords(RecordQueue.java:112)
        at org.apache.kafka.streams.processor.internals.PartitionGroup.addRawRecords(PartitionGroup.java:185)
        at org.apache.kafka.streams.processor.internals.StreamTask.addRecords(StreamTask.java:957)
        at org.apache.kafka.streams.processor.internals.TaskManager.addRecordsToTasks(TaskManager.java:1009)
        at org.apache.kafka.streams.processor.internals.StreamThread.pollPhase(StreamThread.java:907)
        at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:720)
        at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:583)
        at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:556)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.UriBuilder
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 22 common frames omitted
2022-04-26T14:03:10,053Z [system] [io.ksml.example.processor-00d39059-38f3-4371-b2f6-09c570d8005d-StreamThread-1] ERROR o.apache.kafka.streams.KafkaStreams -
                stream-client [io.ksml.example.processor-00d39059-38f3-4371-b2f6-09c570d8005d] Encountered the following exception during processing and the registered exception handler opted to SHUTDOWN_CLIENT. The streams client is going to shut down now.
java.lang.NoClassDefFoundError: javax/ws/rs/core/UriBuilder
        at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:656)
        at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:642)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaByIdFromRegistry(CachedSchemaRegistryClient.java:217)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaBySubjectAndId(CachedSchemaRegistryClient.java:291)
        at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaById(CachedSchemaRegistryClient.java:276)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer$DeserializationContext.schemaFromRegistry(AbstractKafkaAvroDeserializer.java:273)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:97)
        at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:76)
        at io.confluent.kafka.serializers.KafkaAvroDeserializer.deserialize(KafkaAvroDeserializer.java:55)
        at io.axual.ksml.notation.AvroNotation$AvroSerde$2.deserialize(AvroNotation.java:77)
        at org.apache.kafka.common.serialization.Deserializer.deserialize(Deserializer.java:60)
        at org.apache.kafka.streams.processor.internals.SourceNode.deserializeValue(SourceNode.java:58)
        at org.apache.kafka.streams.processor.internals.RecordDeserializer.deserialize(RecordDeserializer.java:66)
        at org.apache.kafka.streams.processor.internals.RecordQueue.updateHead(RecordQueue.java:176)
        at org.apache.kafka.streams.processor.internals.RecordQueue.addRawRecords(RecordQueue.java:112)
        at org.apache.kafka.streams.processor.internals.PartitionGroup.addRawRecords(PartitionGroup.java:185)
        at org.apache.kafka.streams.processor.internals.StreamTask.addRecords(StreamTask.java:957)
        at org.apache.kafka.streams.processor.internals.TaskManager.addRecordsToTasks(TaskManager.java:1009)
        at org.apache.kafka.streams.processor.internals.StreamThread.pollPhase(StreamThread.java:907)
        at org.apache.kafka.streams.processor.internals.StreamThread.runOnce(StreamThread.java:720)
        at org.apache.kafka.streams.processor.internals.StreamThread.runLoop(StreamThread.java:583)
        at org.apache.kafka.streams.processor.internals.StreamThread.run(StreamThread.java:556)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.UriBuilder
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 22 common frames omitted
2022-04-26T14:03:10,773Z [system] [pool-4-thread-1] INFO  i.a.k.r.backend.kafka.KafkaBackend -
                Streams implementation has stopped, stopping Kafka Backend

Environment

Thank you for your help

tonvanbart commented 2 years ago

Hi Laurent, I think the root cause is that module ksml-query has a dependency on jakarta.ws.rs-api:3.0.0 and module ksml depends on the Confluent schema registry client which transitively depends on jakarta.ws.rs-api:2.1.6. Maven tries to resolve the conflict and in the runtime image only the 3.0.0 version is present. Unfortunately the package naming between the versions is slightly different and what is called javax.ws.rs.core.UriBuilder in 2.1.6 is called jakarta.ws.rs.core.UriBuilder in 3.0.0. (This is apparently due to some trademark discussion between the Eclipse foundation and Oracle).

To resolve either module ksml-query will have to be downgraded to use ws 2.1.6, or module ksml needs to be made to work with ws 3.0.0 (probably by upgrading the registry cient dependency). I've tried the former but did not manage to get it to build. (See also comment thread in #35 )

lawcha commented 2 years ago

Hi, Okay, I see. Thank you for the explanation. Hopefully, I am not in a hurry to use KSML in my project. I am looking forward to an update. Does version 0.0.3 of KSML works well? I would like to try to understand how the given examples work until the current bug is solved.