diff --git a/NEXT_CHANGELOG.md b/NEXT_CHANGELOG.md index 44a5be6a8..6fd9c2379 100644 --- a/NEXT_CHANGELOG.md +++ b/NEXT_CHANGELOG.md @@ -5,6 +5,7 @@ ### New Features and Improvements ### Bug Fixes + * `UserAgent.env()` no longer throws `NullPointerException` when `PATH` variable is not found ### Security Vulnerabilities diff --git a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java index 133417c9c..a3581f633 100644 --- a/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java +++ b/databricks-sdk-java/src/main/java/com/databricks/sdk/core/UserAgent.java @@ -33,10 +33,21 @@ public String getValue() { private static final ArrayList otherInfo = new ArrayList<>(); - // TODO: check if reading from - // /META-INF/maven/com.databricks/databrics-sdk-java/pom.properties - // or getClass().getPackage().getImplementationVersion() is enough. - private static final String version = "0.79.0"; + // Try to get version from package metadata or fallback to hardcoded value + private static final String version; + static { + String v = null; + try { + Package pkg = UserAgent.class.getPackage(); + if (pkg != null) { + v = pkg.getImplementationVersion(); + } + } catch (Exception ignored) {} + if (v == null) { + v = "0.79.0"; + } + version = v; + } public static void withProduct(String product, String productVersion) { UserAgent.product = product; @@ -233,11 +244,16 @@ private static String cicdProvider() { private static Environment env() { if (env == null) { - env = - new Environment( - System.getenv(), - System.getenv("PATH").split(File.pathSeparator), - System.getProperty("os.name")); + Map sysEnv = System.getenv(); + if (sysEnv == null) { + sysEnv = Collections.emptyMap(); + } + String pathVar = sysEnv.get("PATH"); + String[] pathArr = pathVar != null ? pathVar.split(File.pathSeparator) : new String[0]; + env = new Environment( + sysEnv, + pathArr, + System.getProperty("os.name")); } return env; } diff --git a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java index 9d0b7f6c2..9c0b7181b 100644 --- a/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java +++ b/databricks-sdk-java/src/test/java/com/databricks/sdk/core/UserAgentTest.java @@ -101,4 +101,13 @@ public void testUserAgentCicdTwoProvider() { Assertions.assertTrue(UserAgent.asString().contains("cicd/gitlab")); UserAgent.env = null; } + + @Test + public void testEnvNoPath() { + // Fix NullPointerException when System.getenv() returns null or missing PATH property + UserAgent.env = null; + Environment environment = UserAgent.env(); + Assertions.assertNotNull(environment); + UserAgent.env = null; + } }