Camunda 8 connector does not execute

Hey guys, quick question.

I got my connector for C8 implemented, the template is deployed in the cluster, I’m running my connector as a part of a local zeebee worker.

As I run a process I can see that a connection works fine

16:43:03.002 [pool-2-thread-1] INFO io.camunda.connector.runtime.util.outbound.ConnectorJobHandler - Received job 2251799824182831
16:43:03.008 [grpc-nio-worker-ELG-1-4] DEBUG io.grpc.netty.NettyClientHandler - [id: 0x258fec34, L:/192.168.30.155:55811 - R:e5a103ce-698c-4933-b585-bf2565c262ed.bru-2.zeebe.camunda.io/34.102.176.229:443] INBOUND HEADERS: streamId=9 headers=GrpcHttp2ResponseHeaders[grpc-status: 0] padding=0 endStream=true
16:43:03.009 [grpc-default-executor-0] DEBUG io.camunda.zeebe.client.job.poller - Activated 1 jobs for worker csfservice and job type io.camunda:csfservice-api:1

but the process stops and the function public Object execute(OutboundConnectorContext context) is never called.

Any tips?

Did you try enabling logs to see what is causing the issue.

Yes, the stacktrace does not say much

17:29:18.309 [grpc-default-executor-0] DEBUG io.camunda.zeebe.client.job.poller - Activated 1 jobs for worker csfservice and job type io.camunda:csfservice-api:1
17:29:18.309 [pool-2-thread-1] INFO io.camunda.connector.runtime.util.outbound.ConnectorJobHandler - Received job 2251799824186822
17:29:18.309 [pool-2-thread-1] DEBUG io.camunda.connector.runtime.util.outbound.ConnectorJobHandler - Exception while processing job 2251799824186822, error: {}
java.util.NoSuchElementException: null
	at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1318)
	at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1306)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.loadOrCreateSecretProvider(ConnectorJobHandler.java:112)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.getSecretProvider(ConnectorJobHandler.java:104)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.handle(ConnectorJobHandler.java:65)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.executeJob(JobRunnableFactory.java:44)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.lambda$create$0(JobRunnableFactory.java:39)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	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:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
17:29:18.310 [pool-2-thread-1] ERROR io.camunda.connector.runtime.util.outbound.ConnectorJobHandler - Exception while processing job 2251799824186822, error: {}
java.util.NoSuchElementException: null
	at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1318)
	at java.base/java.util.ServiceLoader$2.next(ServiceLoader.java:1306)
	at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1403)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.loadOrCreateSecretProvider(ConnectorJobHandler.java:112)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.getSecretProvider(ConnectorJobHandler.java:104)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.handle(ConnectorJobHandler.java:65)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.executeJob(JobRunnableFactory.java:44)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.lambda$create$0(JobRunnableFactory.java:39)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	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:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
17:29:18.310 [pool-2-thread-1] ERROR io.camunda.connector.runtime.util.outbound.ConnectorJobHandler - Exception while processing job 2251799824186822, error: {}
java.lang.NullPointerException: null
	at io.camunda.zeebe.gateway.protocol.GatewayOuterClass$FailJobRequest$Builder.setErrorMessage(GatewayOuterClass.java:21983)
	at io.camunda.zeebe.client.impl.command.FailJobCommandImpl.errorMessage(FailJobCommandImpl.java:67)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.failJob(ConnectorJobHandler.java:128)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.lambda$handle$1(ConnectorJobHandler.java:89)
	at java.base/java.util.Optional.ifPresentOrElse(Optional.java:198)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.handle(ConnectorJobHandler.java:77)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.executeJob(JobRunnableFactory.java:44)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.lambda$create$0(JobRunnableFactory.java:39)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	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:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)
17:29:18.310 [pool-2-thread-1] WARN io.camunda.zeebe.client.job.worker - Worker csfservice failed to handle job with key 2251799824186822 of type io.camunda:csfservice-api:1, sending fail command to broker
java.lang.NullPointerException: null
	at io.camunda.zeebe.gateway.protocol.GatewayOuterClass$FailJobRequest$Builder.setErrorMessage(GatewayOuterClass.java:21983)
	at io.camunda.zeebe.client.impl.command.FailJobCommandImpl.errorMessage(FailJobCommandImpl.java:67)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.failJob(ConnectorJobHandler.java:128)
	at io.camunda.connector.runtime.util.outbound.ConnectorJobHandler.handle(ConnectorJobHandler.java:94)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.executeJob(JobRunnableFactory.java:44)
	at io.camunda.zeebe.client.impl.worker.JobRunnableFactory.lambda$create$0(JobRunnableFactory.java:39)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
	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:1136)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
	at java.base/java.lang.Thread.run(Thread.java:833)

Increase the log level to Debug.

curl ‘http://localhost:9600/actuator/loggers/io.camunda.zeebe’ -i -X POST -H ‘Content-Type: application/json’ -d ‘{“configuredLevel”:“debug”}’

Found the issue. I’m not sure if it is a bug in the Camunda code, but it might be.

I wrapped my connector in a Zeebe client and without passing a SecretProvider explicitly, exception was thrown as no secret provider was found. I think If you don’t pass it, then it should be provided by default. Let me get into the details.

If I go for something like this then it works:

public void runWorker(ZeebeClient client) {
        client.newWorker()
                .jobType(CONFIG.jobType())
                .handler(new ConnectorJobHandler(new MyFunction(), new SecretProvider() {
                    @Override
                    public String getSecret(String s) {
                        return "some secret";
                    }
                }))
                .name(CONFIG.workerName())
                .open();
    }

but without passing a SecretProvider() like this:

    public void runWorker(ZeebeClient client) {
        client.newWorker()
                .jobType(CONFIG.jobType())
                .handler(new ConnectorJobHandler(new MyFunction()))
                .name(CONFIG.workerName())
                .open();
    }

it does not work. Here is the code that will throw the exception (ConnectorJobHandler:: line 42):