Spec
http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptContext.html#getAttribute-java.lang.String-
says "Returns null if no attribute with the name exists in any scope."
Spec
http://docs.oracle.com/javase/8/docs/api/javax/script/ScriptContext.html#getAttributesScope-java.lang.String-
says: "Returns: The lowest scope. Returns -1 if no attribute with the given name is defined in any scope."
However for GLOBAL_SCOPE setting attribute value leads to inability to get the value which was set and the scope which was used.
Consider the following code:
new ScriptEngineManager()
.getEngineFactories()
.stream()
.map(ScriptEngineFactory::getScriptEngine)
.map((engine) -> {
System.err.println("engine: " + engine);
return engine.getContext();
})
.forEach(c -> {
c.setAttribute("name1234", "value", ScriptContext.GLOBAL_SCOPE);
System.err.println("value = " + c.getAttribute("name1234"));
System.err.println("scope = " + c.getAttributesScope("name1234"));
});
The output will contain
engine: jdk.nashorn.api.scripting.NashornScriptEngine@f3eef9
value = null
scope = -1
The following JCK9 test will fail due to this issue:
api/javax_script/ScriptContext/index.html#SetGetAttribute[setGet]
api/javax_script/ScriptContext/index.html#SetGetAttribute[getAttributesScope]