자바 스크립트를 사용하는 자바 사용자로서 용서해주십시오.Rhino Javascript 엔진이 함수가 존재하지 않는 이유는 무엇입니까?
Java 응용 프로그램에 대해 쉽게 스크립트를 작성할 수있는 통합 테스트 케이스를 정의하고 싶었습니다. 나는 자바 스크립트가 완벽한 스크립트 언어가 될 것이라고 생각했다. 이를 위해 JDK 7에 포함 된 Rhino 엔진을 Java의 Scripting API를 통해 사용하고 있습니다. 스크립트는 이미 애플리케이션에 정의 된 Java 클래스에 액세스 할 수 있으며 통합 테스트를위한 유스 케이스 시나리오를 정의하기 위해 재사용 할 수 있습니다.
Java 응용 프로그램에서 자바 스크립트 파일 (Including a JavaScript file during Rhino eval)을로드 할 수 있도록 jsengine으로 스크립트에 자바 스크립트 엔진 자체를 바인딩했습니다.
아래에 정의 된 나는,이 개 자바 스크립트 파일이 :
Function.js :
function send(msg) {
send.sendMessage(msg);
}
TestCase.js
을jsengine.eval(new java.io.FileReader("Function.js");
sendMsg("Test Message");
나는 또한 다음과 같은 객체가 정의와 바인더 제본 한
"javaobj"로 스크립트 :
public class TestConnection {
...
public void send(String message) {
// Code to send the string message via JMS
}
}
그러나 Rhino 엔진은 다음 예외로 인해 불평합니다. 어떤 이유로 javaobj의 send 메소드를 호출하는 것이 싫어 보인다.
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function send in object
function sendMsg(msg) {...}. (TestCase.js#3) in TestCase.js at line number 3
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:224)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:212)
at com.foo.test.scenario.JavaScriptEngine.execute(JavaScriptEngine.java:56)
at com.foo.test.TestSuite.start(TestSuite.java:88)
at com.foo.test.TestSuite.main(TestSuite.java:41)
Caused by: sun.org.mozilla.javascript.internal.EcmaError: TypeError: Cannot find function send in object
function sendMsg(msg) {...}. (TestCase.js#3) in TestCase.js at line number 3
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3773)
at sun.org.mozilla.javascript.internal.ScriptRuntime.constructError(ScriptRuntime.java:3751)
at sun.org.mozilla.javascript.internal.ScriptRuntime.typeError(ScriptRuntime.java:3779)
at sun.org.mozilla.javascript.internal.ScriptRuntime.typeError2(ScriptRuntime.java:3798)
at sun.org.mozilla.javascript.internal.ScriptRuntime.notFunctionError(ScriptRuntime.java:3869)
at sun.org.mozilla.javascript.internal.ScriptRuntime.getPropFunctionAndThisHelper(ScriptRuntime.java:2345)
at sun.org.mozilla.javascript.internal.ScriptRuntime.getPropFunctionAndThis(ScriptRuntime.java:2312)
at sun.org.mozilla.javascript.internal.Interpreter.interpretLoop(Interpreter.java:1524)
at sun.org.mozilla.javascript.internal.Interpreter.interpret(Interpreter.java:854)
at sun.org.mozilla.javascript.internal.InterpretedFunction.call(InterpretedFunction.java:164)
at sun.org.mozilla.javascript.internal.ContextFactory.doTopCall(ContextFactory.java:429)
at com.sun.script.javascript.RhinoScriptEngine$1.superDoTopCall(RhinoScriptEngine.java:116)
at com.sun.script.javascript.RhinoScriptEngine$1.doTopCall(RhinoScriptEngine.java:109)
at sun.org.mozilla.javascript.internal.ScriptRuntime.doTopCall(ScriptRuntime.java:3163)
at sun.org.mozilla.javascript.internal.InterpretedFunction.exec(InterpretedFunction.java:175)
at sun.org.mozilla.javascript.internal.Context.evaluateReader(Context.java:1159)
at com.sun.script.javascript.RhinoScriptEngine.eval(RhinoScriptEngine.java:214)
... 4 more
누구도 Rhino에서 이러한 유형의 문제가 발생 했습니까?
P. 이 질문은 관련이있는 것으로 보이지만 응답이 없습니다 (TypeError in Rhino: migration from Java 6 to Java 7)
아마 여기에 좀 더 많은 코드가 필요할 것입니다. 여기에 나와있는 코드는 적어도 나에게는 정확하지만 아마도 표시되지 않은 코드에 문제가있을 수 있습니다. –