2016-10-18 32 views
1

我目前在一個項目中使用Nashorn,我想創建NashornScriptEngineFactoryScriptEngine,只有ClassFilter爲了保護我的腳本以避免對某些庫的意外調用。我還想向工廠添加參數(這裏是--strict以便在嚴格模式下執行所有javascript函數)。爲什麼NashornScriptEngineFactory不能僅通過ClassFilter和args獲得ScriptEngine?

我發現只有這些原型在NashornScriptEngineFactory

public ScriptEngine getScriptEngine() 
public ScriptEngine getScriptEngine(final String... args) 
public ScriptEngine getScriptEngine(final ClassFilter classFilter) 
public ScriptEngine getScriptEngine(final ClassLoader appLoader) 
public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader) 
public ScriptEngine getScriptEngine(final String[] args, final ClassLoader appLoader, final ClassFilter classFilter) 

我不知道爲什麼沒有原型:

public ScriptEngine getScriptEngine(final String[] args, final ClassFilter classFilter) 

誰能幫助我?

+2

只需使用調用'getScriptEngine()'的類的ClassLoader實例即可。就像,只要通過'this.getClass()。getClassLoader()'。 – Pointy

+0

@Pointy它似乎像一個魅力工作。非常感謝。如果你願意,我讓你回答這個問題。我會將其標記爲正確的。 –

回答

2

在一個正常的簡單情況下,您通常可以使用正在進行調用的類的類加載器來獲取ScriptEngine實例。也就是說,您可以通過

this.getClass().getClassLoader() 

(或明確引用該類的名稱)。只需將其傳遞給三參數getScriptEngine()方法即可。

現在,在非常規,非那麼簡單的情況下,您有多個類裝載器需要擔心(有時候是servlet容器中的問題或類似Ant任務的問題),那麼在哪裏從類加載器可能會有所作爲。如果你確實處於這種情況,那麼(A)祝你好運,並且(B)希望你有足夠的背景知道要傳遞什麼。

相關問題