conductor-oss / conductor-oss/java-sdk
ApiClient.applyEnvVariables() throws NullPointerException when CONDUCTOR_AUTH_KEY is not set
- 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
Assessment
This issue has not been assessed yet.