2013-02-11 10 views
5

मैं एक जावा विधि का पर्दाफाश करने के इतना है कि यह मनमाना स्क्रिप्ट द्वारा कहा जा सकता है चाहता हूँ। तब स्क्रिप्ट वापसी मूल्य पर अंकगणितीय परिचालन करने में सक्षम होना चाहिए।राइनो: कैसे जावास्क्रिप्ट से बुलाया जावा विधि से एक पूर्णांक वापस जाने के लिए?

समस्या यह है कि हालांकि उजागर विधि जावा Integer लौटाती है, हालांकि स्क्रिप्ट को वास्तव में नियमित संख्या नहीं मिलती है, लेकिन org.mozilla.javascript.NativeJavaObject का उदाहरण मिलता है।

यहाँ कुछ सरल परीक्षण कोड है कि व्यवहार से पता चलता है:

public class RhinoTest 
{ 
    public static void main(String[] args) 
    { 
     String script = "foo.getBar() + 1"; 
     Context context = Context.enter(); 
     ScriptableObject scriptableObject = context.initStandardObjects(); 
     ScriptableObject.putProperty(scriptableObject, "foo", new Foo()); 
     Object result = context.evaluateString(scriptableObject, script, "FooBar", 1, null); 
     Context.exit(); 
     System.out.println(result); 
    } 

    public static class Foo 
    { 
     public Integer getBar() 
     { 
      return 9; 
     } 
    } 
} 

अपेक्षित परिणाम 10 है, लेकिन स्क्रिप्ट रिटर्न 91

तो मैं getBar() कॉल स्क्रिप्ट के अंदर हो वास्तव में एक नियमित रूप से जावास्क्रिप्ट डेटा प्रकार लौट कैसे बना सकते हैं? कृपया ध्यान दें कि मैं unwrap() कॉल, या की तरह जोड़कर स्क्रिप्ट कोड को बदलने के लिए नहीं करना चाहती।

+0

कोशिश '¨foo.getBar()' + 1 – subodh

उत्तर

3

अपने संदर्भ WrapFactory संशोधित करें:

context.getWrapFactory() 
     .setJavaPrimitiveWrap(false); 
-2
public static void main(String[] args) 
    { 
    int value = new Foo().getBar()+1; 
    String script = String.valueOf(value); 
    Context context = Context.enter(); 
    ScriptableObject scriptableObject = context.initStandardObjects(); 
    ScriptableObject.putProperty(scriptableObject, "foo", new Foo()); 
    Object result = context.evaluateString(scriptableObject, script, "FooBar", 1, null); 
    Context.exit(); 
    System.out.println(result); 
    } 
    public static class Foo 
    { 
    public Integer getBar() 
    { 
    return 9; 
    } 
    } 
+0

आप कैसे है कि कोड समस्या का हल समझा सकते हैं? –

संबंधित मुद्दे