Rhino Оценка объекта JavaScript в Java

Я новичок в Rhino и пытаюсь преобразовать объект javascript в объект java, но не могу этого сделать. Кажется, он не оценивает должным образом.

Javascript, который у меня есть,

var myObject = new Object();
myObject.string1 = 'Hello';
myObject.string2 = 'World';
myObject.id = 1;
var parser = new Packages.com.MyParser();
var returnStr = parser.PrintObj(myObject);

И у меня есть следующий класс Java, который я хочу оценить это,

public class Person extends ScriptableObject {

    private int id;
    private String string1;
    private String string2;

    public Person() {}

    public void jsConstructor() {
        this.string1 = "";
        this.string2 = "";
        this.id = 0;
    }

    public int getID()
    {
        return this.id;
    }

    public void jsSet_id(int value)
    {
        this.id = value;
    }

    public int jsGet_id()
    {
        return this.id;
    }

    public String jsGet_string1()
    {
        return this.string1;
    }

    public void jsSet_string1(String value)
    {
        this.string1 = value;
    }

    public String jsGet_string2() {
        return this.string2;
    }

    public void jsSet_string2(String value)
    {
        this.string2 = value;
    }

    @Override
    public String toString() {
        return id + " " + string1 + " " + string2;
    }

    @Override
    public String getClassName() {
        return "Person";
    }

И скелет моего парсера,

public class MyParser {
    public String PrintObj(ScriptableObject obj) {
        // Need to convert to Person object here
        // Obviously casting doesnt work here
        return null;
    }
}

Спасибо

1 ответ

Решение

ОК разобрался!

Прежде всего мне нужно было определить класс в javascript как. Сначала он жаловался, что не может найти класс без пространства имен "com". Пришлось добавить что...

defineClass("com.Person")
var myObject = new Person();
myObject.string1 = 'Hello';
myObject.string2 = 'World';
myObject.id = 1;
var parser = new Packages.com.MyParser();
var returnStr = parser.PrintObj(myObject);

И тогда в парсере я добавил следующее,

public String PrintObj(ScriptableObject obj) {
    try {
        Person pObj = (Person)Context.jsToJava(obj, Person.class);
        System.out.println("Printing person: " + pObj);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
Другие вопросы по тегам