为什么Rhino Javascript引擎抱怨函数不存在?

为什么Rhino Javascript引擎抱怨函数不存在?,java,javascript,rhino,Java,Javascript,Rhino,请原谅我,因为我是一个涉足Javascript业务的Java人: 我希望能够定义一组集成测试用例,以便于针对Java应用程序编写脚本。我认为Javascript将是编写脚本的完美语言。为此,我通过Java的脚本API使用JDK 7附带的Rhino引擎。这些脚本可以访问已经在应用程序中定义的Java类,并且可以被重用来定义集成测试的用例场景 在Java应用程序中,我将javascript引擎本身作为jsengine绑定到脚本,以便加载javascript文件 我有两个Javascript文件,定义

请原谅我,因为我是一个涉足Javascript业务的Java人:

我希望能够定义一组集成测试用例,以便于针对Java应用程序编写脚本。我认为Javascript将是编写脚本的完美语言。为此,我通过Java的脚本API使用JDK 7附带的Rhino引擎。这些脚本可以访问已经在应用程序中定义的Java类,并且可以被重用来定义集成测试的用例场景

在Java应用程序中,我将javascript引擎本身作为jsengine绑定到脚本,以便加载javascript文件

我有两个Javascript文件,定义如下:

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
有没有人在犀牛身上遇到过这种问题


另外,这个问题似乎有关联,但也没有给出答案

看起来我找到了自己的答案。Javascript函数和绑定Java对象的名称之间存在名称冲突。两者名称相同,引擎尝试调用函数对象上不存在的方法


愚蠢的我…:P

这里可能需要更多的代码。这里的代码看起来是正确的,至少对我来说是这样,但也许您没有显示的代码有问题。我仍然不知道您是如何解决的。我编写了一个Ant scriptdef,它混合使用Java和Javascript代码。我试图调用我的变量trim,但得到了一个类似的错误。我如何告诉mozilla引擎使用Java版本,甚至Javascript版本,因为两者都应该这样做?