hivemq / hivemq-swarm-hello-world-extension

HiveMQ Swarm extension for demonstrating the HiveMQ Swarm extension system

Home Page:https://www.hivemq.com/docs/swarm/latest/swarm/extensions.html

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

JSON Payload Generator

vviswadeep opened this issue · comments

I am able to replicate the same exercise for the Hello World,
I'd like to test the same for a JSON Payload,

This is what I tried,

        final Counter counter = extensionContext.getMetricRegistry().counter("payloads.generated");
        extensionContext.getExtensionRegistry().addPayloadGenerator("hello-world-generator", payloadGeneratorInput -> {
            counter.inc();
            JSONObject obj=new JSONObject();
            obj.put("name","sonoo");
            obj.put("age",new Integer(27));
            obj.put("salary",new Double(600000));
            
            //System.out.print(obj);
            
            return ByteBuffer.wrap(obj.toString().getBytes(StandardCharsets.UTF_8));

The Jar was build successfully, I pasted the jar in the extension, but I am getting the following error.

2023-05-12 16:18:55,349 WARN   - Publishing failed for client group 'cg1'. PayloadGenerator 'com.hivemq.swarm.extensions.helloworld.HelloWorldMain$$Lambda$287/0x00000008003e7040' threw an unhandled 'NoClassDefFoundError'.PayloadGenerators are responsible for their own exception handling.
java.lang.NoClassDefFoundError: org/json/simple/JSONObject
        at com.hivemq.swarm.extensions.helloworld.HelloWorldMain.lambda$extensionMain$0(HelloWorldMain.java:41)
        at hsw.u.a.a(Source.java:46)
        at hsw.r.a.a(Source.java:458)
        at hsw.r.a.a(Source.java:371)
        at io.reactivex.internal.operators.flowable.FlowableMap$MapConditionalSubscriber.tryOnNext(FlowableMap.java:123)
        at io.reactivex.internal.operators.flowable.FlowableRangeLong$RangeConditionalSubscription.slowPath(FlowableRangeLong.java:220)
        at io.reactivex.internal.operators.flowable.FlowableRangeLong$BaseRangeSubscription.request(FlowableRangeLong.java:94)
        at io.reactivex.internal.subscribers.BasicFuseableConditionalSubscriber.request(BasicFuseableConditionalSubscriber.java:152)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.request(BasicFuseableSubscriber.java:153)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.requestUpstream(FlowableSubscribeOn.java:133)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.onSubscribe(FlowableSubscribeOn.java:90)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.subscribers.BasicFuseableSubscriber.onSubscribe(BasicFuseableSubscriber.java:67)
        at io.reactivex.internal.subscribers.BasicFuseableConditionalSubscriber.onSubscribe(BasicFuseableConditionalSubscriber.java:66)
        at io.reactivex.internal.operators.flowable.FlowableRangeLong.subscribeActual(FlowableRangeLong.java:39)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:35)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableFilter.subscribeActual(FlowableFilter.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:50)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:50)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.internal.operators.flowable.FlowableMap.subscribeActual(FlowableMap.java:37)
        at io.reactivex.Flowable.subscribe(Flowable.java:14935)
        at io.reactivex.Flowable.subscribe(Flowable.java:14882)
        at io.reactivex.internal.operators.flowable.FlowableSubscribeOn$SubscribeOnSubscriber.run(FlowableSubscribeOn.java:82)
        at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66)
        at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.ClassNotFoundException: org.json.simple.JSONObject
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
        ... 44 common frames omitted

Please let me know how to proceed. Thank you

Hi @vviswadeep
You need to package all your dependencies into your extension jar.
You can for example use the shadow Gradle plugin (https://github.com/johnrengelman/shadow) and use the output of the shadowJar task instead of the jar task.
Hope this helps.