JSON Payload Generator
vviswadeep opened this issue · comments
vviswadeep commented
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
Silvio Giebl commented
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.