Java Script Engine retrieveEngineByName(ScriptEngineManager scriptEngineManager, String engineName)

Here you can find the source of retrieveEngineByName(ScriptEngineManager scriptEngineManager, String engineName)

Description

Retrieve a ScriptEngine from the given ScriptEngineManager by name, delegating to ScriptEngineManager#getEngineByName but throwing a descriptive exception if not found or if initialization failed.

License

Apache License

Parameter

Parameter Description
scriptEngineManager the ScriptEngineManager to use
engineName the name of the engine

Exception

Parameter Description
IllegalArgumentException if no matching engine has been found
IllegalStateException if the desired engine failed to initialize

Return

a corresponding ScriptEngine (never null )

Declaration

public static ScriptEngine retrieveEngineByName(ScriptEngineManager scriptEngineManager, String engineName) 

Method Source Code


//package com.java2s;
/*/*from   w  w  w.j a v  a2  s .  c  om*/
 * Copyright 2002-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.SimpleBindings;

public class Main {
    /**
     * Retrieve a {@link ScriptEngine} from the given {@link ScriptEngineManager}
     * by name, delegating to {@link ScriptEngineManager#getEngineByName} but
     * throwing a descriptive exception if not found or if initialization failed.
     * @param scriptEngineManager the ScriptEngineManager to use
     * @param engineName the name of the engine
     * @return a corresponding ScriptEngine (never {@code null})
     * @throws IllegalArgumentException if no matching engine has been found
     * @throws IllegalStateException if the desired engine failed to initialize
     */
    public static ScriptEngine retrieveEngineByName(ScriptEngineManager scriptEngineManager, String engineName) {
        ScriptEngine engine = scriptEngineManager.getEngineByName(engineName);
        if (engine == null) {
            Set<String> engineNames = new LinkedHashSet<>();
            for (ScriptEngineFactory engineFactory : scriptEngineManager.getEngineFactories()) {
                List<String> factoryNames = engineFactory.getNames();
                if (factoryNames.contains(engineName)) {
                    // Special case: getEngineByName returned null but engine is present...
                    // Let's assume it failed to initialize (which ScriptEngineManager silently swallows).
                    // If it happens to initialize fine now, alright, but we really expect an exception.
                    try {
                        engine = engineFactory.getScriptEngine();
                        engine.setBindings(scriptEngineManager.getBindings(), ScriptContext.GLOBAL_SCOPE);
                    } catch (Throwable ex) {
                        throw new IllegalStateException(
                                "Script engine with name '" + engineName + "' failed to initialize", ex);
                    }
                }
                engineNames.addAll(factoryNames);
            }
            throw new IllegalArgumentException("Script engine with name '" + engineName
                    + "' not found; registered engine names: " + engineNames);
        }
        return engine;
    }

    static Bindings getBindings(Map<String, Object> bindings) {
        return (bindings instanceof Bindings ? (Bindings) bindings : new SimpleBindings(bindings));
    }
}

Related

  1. importClass(ScriptEngine e, Class pkg, Bindings... b)
  2. isJsEngineAvailable(String engineName, Logger logger)
  3. listGems(ScriptEngine jruby)
  4. listScriptEngines()
  5. registerFactoryToManager(ScriptEngineFactory factory, ScriptEngineManager scriptEngineManager)
  6. scriptEngine(String epStr, Map per)
  7. showEngineList()