0

I have REST API and I want to consume Kafka stream in some api calls. I am able to deploy the code to JBoss server without any errors but when executing the api call I get the following error:

org.jboss.resteasy.spi.UnhandledException: java.lang.NoClassDefFoundError: org/apache/kafka/clients/consumer/KafkaConsumer

I can see that class in External Libraries in IntelliJ. Here is my resource class:

package com.company.rest;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import java.util.Properties;
import java.util.Arrays;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import java.util.function.Supplier;

@Path("topic")
public class TopicResource {
    private final static String TOPIC = "MyTopic";
    private final static String BOOTSTRAP_SERVERS = "localhost:9092";

    @GET
    @Path("/{name}")
    @Produces(MediaType.TEXT_PLAIN)
    public void getTopic(@PathParam("name") String name) {

        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "SupplierDeserializer");

        KafkaConsumer<String, Supplier> consumer = new KafkaConsumer<String, Supplier>(props);

        consumer.subscribe(Arrays.asList("MyTopic"));

        while (true){
            ConsumerRecords<String, Supplier> records = consumer.poll(100);
            for (ConsumerRecord<String, Supplier> record : records){
                System.out.println("Print some text");
            }
        }
    }
}

Here is my pom.xml file:

<dependencies>
    <!-- https://mvnrepository.com/artifact/javax.ejb/javax.ejb-api -->
    <dependency>
        <groupId>javax.ejb</groupId>
        <artifactId>javax.ejb-api</artifactId>
        <version>3.2</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.0</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.8.5</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.0.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-streams -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
        <version>2.0.0</version>
    </dependency>
</dependencies>

I'm not sure if I'm doing anything wrong or it is related to some IntelliJ configuration. Any help will be highly appreciated. Thanks in advance!

AsthaUndefined
  • 1,111
  • 1
  • 11
  • 24
eazybob
  • 109
  • 2
  • 10
  • 1
    That error is due to the class not being in the classloader or possibly the JVM. What this means it is not on the server that your application is executing on or you do not have access to it. Some jars/classes you are required to provide with your application. Edit: [Packaging dependencies in your jar/war](https://stackoverflow.com/questions/16222748/building-a-fat-jar-using-maven) – Mr00Anderson Aug 08 '18 at 16:13
  • 1
    Is The jar in your war file? – Thorbjørn Ravn Andersen Aug 08 '18 at 16:13
  • you can remove kafka-streams jar sinces you are not using it and try – Ryuzaki L Aug 08 '18 at 18:04

0 Answers0