In my bpmn flow, camunda 8 script task
SCRIPT TASK
<zeebe:taskHeaders>
<zeebe:header key="language" value="javascript" />
<zeebe:header **key**="script" **value**="var firstName = "John"; var lastName = "Doe"; var age = 30; var message = "Hello, my name is " + firstName + " " + lastName + " and I am " + age + " years old."; console.log(message);" />
</zeebe:taskHeaders>
In Java,
@ZeebeWorker(type = "script", name = "scriptJobWorker", autoComplete = true)
public void script(final JobClient jobClient, final ActivatedJob job) throws InterruptedException {
Object x = job.getVariablesAsMap().get("x");
System.out.println(x);
String script = job.getCustomHeaders().get("script");
if (script != null && job.getCustomHeaders().get("language") != null) {
// Execute the script using GroovyShell
Object result = **evaluateJavaScript**(script);
client.newSetVariablesCommand(job.getProcessInstanceKey()).variables(Map.of("result", result)).send().join();
} else {
// Handle missing script or language
System.out.println("Script or language is missing in job headers");
}
}
**private Object evaluateJavaScript(String script) {**
// Create a new JavaScript engine manager
ScriptEngineManager manager = new ScriptEngineManager();
// Get the JavaScript engine
ScriptEngine engine = manager.getEngineByName("javascript");
System.out.println("Engine name: "+engine);
try {
// Evaluate the script and return the result
return engine.eval(script);
} catch (ScriptException e) {
e.printStackTrace();
return null;
}
}
ERROR
javascript
var firstName = "John"; var lastName = "Doe"; var age = 30; var message = "Hello, my name is " + firstName + " " + lastName + " and I am " + age + " years old."; console.log(message);
**Engine name: null**
2024-03-11T15:03:07.663+05:30 WARN 27632 --- [pool-7-thread-1] io.camunda.zeebe.client.job.worker : Worker scriptJobWorker failed to handle job with key 2251799816104816 of type script, sending fail command to broker
java.lang.NullPointerException: Cannot invoke "javax.script.ScriptEngine.eval(String)" because "engine" is null
at com.zeebe.camunda.ProductOrder.evaluateJavaScript(ProductOrder.java:166) ~[classes/:na]
at com.zeebe.camunda.ProductOrder.script(ProductOrder.java:138) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at io.camunda.zeebe.spring.client.bean.MethodInfo.invoke(MethodInfo.java:51) ~[spring-client-zeebe-8.3.1.jar:8.3.1]
at io.camunda.zeebe.spring.client.jobhandling.JobHandlerInvokingSpringBeans.handle(JobHandlerInvokingSpringBeans.java:54) ~[spring-client-zeebe-8.3.1.jar:8.3.1]
at io.camunda.zeebe.client.impl.worker.JobRunnableFactoryImpl.executeJob(JobRunnableFactoryImpl.java:45) ~[zeebe-client-java-8.3.0.jar:8.3.0]
at io.camunda.zeebe.client.impl.worker.JobRunnableFactoryImpl.lambda$create$0(JobRunnableFactoryImpl.java:40) ~[zeebe-client-java-8.3.0.jar:8.3.0]
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) ~[na:na]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]
What is the issue here ?