[jboss-jira] [JBoss JIRA] (WFLY-3991) JDK 1.8 javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found

Manuel Blechschmidt (JIRA) issues at jboss.org
Fri Oct 17 09:14:36 EDT 2014


Manuel Blechschmidt created WFLY-3991:
-----------------------------------------

             Summary: JDK 1.8 javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found
                 Key: WFLY-3991
                 URL: https://issues.jboss.org/browse/WFLY-3991
             Project: WildFly
          Issue Type: Enhancement
            Reporter: Manuel Blechschmidt
            Assignee: Jason Greene


When using the ScriptManager in a JSF bean the following happens:

ERROR [stderr] (default task-21) ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.javascript.RhinoScriptEngineFactory not found

{code}
package de.example.log.jsf;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;

import javax.enterprise.inject.Model;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

@Model
public class Scripting {

	private String script;
	private String output;


	private ScriptEngineManager mgr = new ScriptEngineManager();
	public static String utilJavaScript = "var print = function (s) { __newOut.print(s); }; var println = function (s) { __newOut.println(s); };";

	public String execute() {
		ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
		ByteArrayOutputStream outputBuffer = new ByteArrayOutputStream(8192);
		PrintStream newOut = new PrintStream(outputBuffer, true);
		Bindings bindings = jsEngine.createBindings();
		bindings.put("__newOut", newOut);
		try {
			jsEngine.eval(utilJavaScript + getScript(), bindings);
		} catch (ScriptException from) {
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(from.getColumnNumber() + " "
							+ from.getFileName() + " " + from.getLineNumber()
							+ " " + from.getMessage()));
			return null;

		}
		newOut.close();
		String returnString = outputBuffer.toString();
		setOutput(returnString);
		try {
			outputBuffer.close();
		} catch (IOException e) {
			FacesContext.getCurrentInstance().addMessage(
					null,
					new FacesMessage(e.getLocalizedMessage()));
		}
		return null;
	}

	public String getScript() {
		return script;
	}

	public void setScript(String script) {
		this.script = script;
	}

	public String getOutput() {
		return output;
	}

	public void setOutput(String output) {
		this.output = output;
	}
}

{code}

The script engines are configured in the following file:

WILDFLY_HOME/modules/system/layers/base/sun/jdk/main/service-loader-resources/META-INF/services/javax.script.ScriptEngineFactory

{code}
com.sun.script.javascript.RhinoScriptEngineFactory
jdk.nashorn.api.scripting.NashornScriptEngineFactory
{code}

It should be made sure that with every JDK JSR 223 compliant requests for a JavaScript engine will work out of the box.



--
This message was sent by Atlassian JIRA
(v6.3.1#6329)


More information about the jboss-jira mailing list