2

I'm trying to build a very simple Pub/Sub demo based on this using Dapr & Quarkus & Gradle and I'm facing this error:

[error]: Build step io.quarkiverse.dapr.deployment.DaprProcessor#vertxProviders threw an exception: java.lang.NoClassDefFoundError: javax/ws/rs/ext/MessageBodyReader
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:506)
at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
at io.quarkiverse.dapr.deployment.DaprProcessor.vertxProviders(DaprProcessor.java:115)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
at java.base/java.lang.reflect.Method.invoke(Method.java:577)
at io.quarkus.deployment.ExtensionLoader$3.execute(ExtensionLoader.java:858)
at io.quarkus.builder.BuildContext.run(BuildContext.java:282)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1512)
at java.base/java.lang.Thread.run(Thread.java:833)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.ext.MessageBodyReader
    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:521)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:516)
    at io.quarkus.bootstrap.classloading.QuarkusClassLoader.loadClass(QuarkusClassLoader.java:466)
    ... 14 more

when Quarkus tries to start or build.

This is my build.gradle file:

plugins {
    id 'java'
    id 'io.quarkus'
}

wrapper{
    gradleVersion = '7.6'
    distributionUrl = distributionUrl.replace("bin", "all")
}

group 'com.test'
version '1.0.0-SNAPSHOT'

repositories {
    mavenLocal()
    mavenCentral()
    jcenter()
}


dependencies {
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
    implementation 'io.dapr:dapr-sdk:1.9.0'
    implementation 'io.dapr:dapr-sdk-actors:1.9.0'
    implementation 'io.quarkiverse.dapr:quarkus-dapr:1.0.4'
    implementation 'io.quarkus:quarkus-resteasy-reactive-jackson'
    implementation 'io.quarkus:quarkus-arc'



//      implementation 'io.quarkus:quarkus-resteasy-reactive'
//      implementation 'io.quarkus:quarkus-rest-client-reactive-jackson'

    compileOnly 'org.projectlombok:lombok:1.18.28'
    annotationProcessor 'org.projectlombok:lombok:1.18.28'

    testCompileOnly 'org.projectlombok:lombok:1.18.28'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.28'

    testImplementation 'io.quarkus:quarkus-junit5'
    testImplementation 'io.rest-assured:rest-assured'
}

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

compileJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << '-parameters'
}
test {
    systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}

compileTestJava {
    options.encoding = 'UTF-8'
}

gradle.properties

#Gradle properties
quarkusPluginId=io.quarkus
quarkusPluginVersion=3.3.0
quarkusPlatformGroupId=io.quarkus.platform
quarkusPlatformArtifactId=quarkus-bom
quarkusPlatformVersion=3.3.0

PubsubResource.java

package io.quarkiverse.dapr.demo;

import java.util.concurrent.atomic.AtomicInteger;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.POST;
import jakarta.ws.rs.Path;

import io.dapr.Topic;
import io.dapr.client.domain.CloudEvent;
import io.quarkiverse.dapr.core.SyncDaprClient;

@Path("/pubsub")
@ApplicationScoped
public class PubsubResource {
    private final AtomicInteger counter = new AtomicInteger(1);

    @Inject
    SyncDaprClient dapr;

    @GET
    public String hello() {
        return "Hello, this is quarkus-dapr demo app1";
    }

    @GET
    @Path("/trigger/topic1")
    public String triggerSendEvent2Topic1() {
        int content = counter.getAndIncrement();
        dapr.publishEvent("topic1", content);
        System.out.println("App1 succeeds to send event to topic1 with content=" + content);

        return "App1 succeeds to send event to topic1 with content=" + content;
    }

    @POST
    @Path("/topic2")
    @Topic(name = "topic2")
    public String eventOnTopic2(String content) {
        System.out.println("App1 received event from topic2: content=" + content);

        return "App1 received event from topic2";
    }

    @POST
    @Path("/topic3")
    @Topic(name = "topic3")
    public String eventOnTopic3(CloudEvent<String> event) {
        String content = event.getData();
        System.out.println("App1 received event from topic3: content=" + content);

        return "App1 received event from topic3";
    }

    @POST
    @Path("/topic4")
    @Topic(name = "topic4")
    public String eventOnTopic4(CloudEvent<TestData> event) {
        TestData testData = event.getData();
        String content = testData.getContent();
        System.out.println("App1 received event from topic4: content=" + content);

        return "App1 received event from topic4";
    }

}

The issue seems to be with the io.quarkiverse.dapr:quarkus-dapr import and I'm not sure if I'm missing another import, a configuration or there is a bug with it.

Any help will be appreciated :-)

oMG
  • 323
  • 1
  • 2
  • 14

1 Answers1

1

As it seems io.quarkiverse.dapr:quarkus-dapr example in github is updated to work with Quarkus 3+ but the latest version released is for version 2.

The only solutions I see is either work with an older Quarkus version or build the source code from github.

oMG
  • 323
  • 1
  • 2
  • 14