Code works in R2, but fails in R3: 
sharedScope = new ImporterTopLevel(cx);
ScriptableObject.putProperty(sharedScope, "Spring",            
Context.javaToJS(getApplicationContext(), sharedScope));
...
Scriptable threadScope = context.newObject(sharedScope);
threadScope.setPrototype(sharedScope);
threadScope.setParentScope(null);

Object o = context.evaluateString(threadScope, "Spring.getBean('messenger')", 
getBeanName(), FIRST_LINE, NULL_SECURITY_DOMAIN);

i.e. Spring == 
org.springframework.context.support.ClassPathXmlApplicationContext
messenger == spring bean name

throws 
org.mozilla.javascript.WrappedException: Wrapped 
org.springframework.beans.factory.BeanDefinitionStoreException: Can only 
specify arguments for the getBean method when referring to a prototype bean 
definition (booblik#1)
        at 
org.mozilla.javascript.Context.throwAsScriptRuntimeEx(Context.java:1786)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:183)
        at 
org.mozilla.javascript.NativeJavaMethod.call(NativeJavaMethod.java:247)
        at org.mozilla.javascript.optimizer.OptRuntime.call1(OptRuntime.java:66)
        at org.mozilla.javascript.gen.booblik_7._c_script_0(booblik:1)
        at org.mozilla.javascript.gen.booblik_7.call(booblik)
        at 
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:426)
        at 
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3178)
        at org.mozilla.javascript.gen.booblik_7.call(booblik)
        at org.mozilla.javascript.gen.booblik_7.exec(booblik)
        at org.mozilla.javascript.Context.evaluateString(Context.java:1111)
        at 
net.sf.apr.spring.JavaScriptFactory.createJavaScriptObject(JavaScriptFactory.java:165)
        at 
net.sf.apr.spring.JavaScriptFactoryEx.createJavaScriptObject(JavaScriptFactoryEx.java:85)
        at 
net.sf.apr.spring.JavaScriptFactoryTest.testFactoryEx(JavaScriptFactoryTest.java:298)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
        at 
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
        at 
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:62)
Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Can 
only specify arguments for the getBean method when referring to a prototype 
bean definition
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.checkMergedBeanDefinition(AbstractBeanFactory.java:1203)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:275)
        at 
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
        at 
org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1087)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at org.mozilla.javascript.MemberBox.invoke(MemberBox.java:161)
        ... 34 more


Debug shows that problem is here:
org.mozilla.javascript.NativeJavaMethod#call
int index = findFunction(cx, methods, args);
should find 
"public Object 
org.springframework.context.support.AbstractApplicationContext.getBean(String)"
but it uses
"public Object 
org.springframework.context.support.AbstractApplicationContext.getBean(String,Object[])"

_______________________________________________
dev-tech-js-engine-rhino mailing list
dev-tech-js-engine-rhino@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to