2016-10-18 12 views
1

Я в настоящее время использую Nashorn в проекте, и я хотел бы создать ScriptEngine от NashornScriptEngineFactory только с ClassFilter, чтобы защитить мой скрипт, чтобы избежать неожиданного вызова в некоторые библиотеки. И я хотел бы также добавить аргументы на завод (здесь --strict, чтобы выполнить все функции javascript в строгом режиме).Почему у NashornScriptEngineFactory нет возможности получить ScriptEngine только с ClassFilter и args?

я нашел только эти прототипы в 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

Просто используйте экземпляр ClassLoader для класса, который вызывает 'getScriptEngine()'. Например, просто передайте 'this.getClass(). GetClassLoader()'. – Pointy

+0

@Pointy Кажется, это работает как шарм. Большое спасибо. Позвольте вам ответить на вопрос, если хотите. Я буду отмечать это как правильное. –

ответ

2

В обычной простой ситуации вы можете просто использовать загрузчик классов класса, который делает вызов, чтобы получить экземпляр ScriptEngine. То есть, вы можете просто пройти

this.getClass().getClassLoader() 

(или явно ссылаться на класс по имени). Просто передайте это методу с тремя аргументами getScriptEngine().

Теперь, в не очень-то нормальных ситуациях, в которых вам не хватает нескольких загрузчиков классов (иногда это проблема в контейнере сервлетов или что-то вроде задачи Ant, например), а затем, где вы получить загрузчик классов может иметь значение. Если вы действительно находитесь в такой ситуации, тогда (A) удачи и (B) надеюсь, вам будет достаточно контекста, чтобы знать, что нужно пройти.