diff --git a/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java b/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java index e788ecca395..b704e01ed98 100644 --- a/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java +++ b/org.springframework.core/src/test/java/org/springframework/core/env/EnvironmentTests.java @@ -291,6 +291,8 @@ public class EnvironmentTests { @SuppressWarnings("unchecked") private static Map getModifiableSystemEnvironment() { + + // for os x / linux Class[] classes = Collections.class.getDeclaredClasses(); Map env = System.getenv(); for (Class cl : classes) { @@ -299,12 +301,45 @@ public class EnvironmentTests { Field field = cl.getDeclaredField("m"); field.setAccessible(true); Object obj = field.get(env); - return (Map) obj; + if (obj != null) { + return (Map) obj; + } } catch (Exception ex) { throw new RuntimeException(ex); } } } + + // for windows + Class processEnvironmentClass; + try { + processEnvironmentClass = Class.forName("java.lang.ProcessEnvironment"); + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theCaseInsensitiveEnvironmentField = processEnvironmentClass.getDeclaredField("theCaseInsensitiveEnvironment"); + theCaseInsensitiveEnvironmentField.setAccessible(true); + Object obj = theCaseInsensitiveEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + + try { + Field theEnvironmentField = processEnvironmentClass.getDeclaredField("theEnvironment"); + theEnvironmentField.setAccessible(true); + Object obj = theEnvironmentField.get(null); + return (Map) obj; + } catch (NoSuchFieldException e) { + // do nothing + } catch (Exception e) { + throw new RuntimeException(e); + } + throw new IllegalStateException(); } }