conductor-oss / conductor-oss/java-sdk

ApiClient.applyEnvVariables() throws NullPointerException when CONDUCTOR_AUTH_KEY is not set

Open
#94 0 comments 0 reactions 1 assignee Claimed by @nthmost-orkes View on GitHub
bug
Dominant language
Java
Stars
12
Forks
10
Avg merge
2d 8h
Merged PRs (30d)
4

Description

## Bug

`ApiClient.applyEnvVariables()` crashes with `NullPointerException` when connecting to a plain OSS Conductor server (no auth needed). Any user who sets only `CONDUCTOR_SERVER_URL` will hit this.

**Tracked as a zero-to-one onboarding blocker in conductor-oss/getting-started#51**

## Steps to Reproduce

```bash
export CONDUCTOR_SERVER_URL=http://localhost:8080/api
# Note: no auth keys set — correct for OSS Conductor
java -cp com.netflix.conductor.sdk.examples.helloworld.Main
```

## Error

```
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException: Cannot invoke "String.trim()" because
the return value of "java.lang.System.getenv(String)" is null
at io.orkes.conductor.client.ApiClient$ApiClientBuilder.applyEnvVariables(ApiClient.java:186)
at io.orkes.conductor.client.ApiClient$ApiClientBuilder.build(ApiClient.java:175)
at io.orkes.conductor.sdk.examples.util.ClientUtil.(ClientUtil.java:27)
```

## Root Cause

In `orkes-client/src/main/java/io/orkes/conductor/client/ApiClient.java`, lines 184–196:

```java
String conductorAuthKey = System.getenv("CONDUCTOR_AUTH_KEY");
if (conductorAuthKey == null) {
conductorAuthKey = System.getenv("CONDUCTOR_SERVER_AUTH_KEY").trim(); // ← NPE if env var is also null
}

String conductorAuthSecret = System.getenv("CONDUCTOR_AUTH_SECRET");
if (conductorAuthSecret == null) {
conductorAuthSecret = System.getenv("CONDUCTOR_SERVER_AUTH_SECRET").trim(); // ← NPE if env var is also null
}
```

When neither `CONDUCTOR_AUTH_KEY` nor `CONDUCTOR_SERVER_AUTH_KEY` is set (the OSS case), `.trim()` is called on `null`.

## Fix

Null-check before `.trim()`:

```java
String conductorAuthKey = System.getenv("CONDUCTOR_AUTH_KEY");
if (conductorAuthKey == null) {
String legacyKey = System.getenv("CONDUCTOR_SERVER_AUTH_KEY");
conductorAuthKey = legacyKey != null ? legacyKey.trim() : null;
}

String conductorAuthSecret = System.getenv("CONDUCTOR_AUTH_SECRET");
if (conductorAuthSecret == null) {
String legacySecret = System.getenv("CONDUCTOR_SERVER_AUTH_SECRET");
conductorAuthSecret = legacySecret != null ? legacySecret.trim() : null;
}
```

## Impact

This crash affects **every example in the `examples` module that uses `ClientUtil`**, including the recommended `helloworld/Main.java`. OSS users have no way to run any of these examples without auth keys, which defeats the zero-to-one experience.

Zero-to-one tracking: **conductor-oss/getting-started#51**

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.