edades fue hecho esta pregunta, pero las respuestas aún parecían correctas. En caso de que sea de interés para cualquier otra persona que intente pasar objetos complejos entre Java y Javascript, quería presentar mi solución.
Escribí un script que convierte NativeObject en objetos JSON (en memoria) (en realidad utilizo objetos basados en BSON de MongoDB, pero solo debería poder sustituir 1-1 por JSONArray y JSONObject en el código de ejemplo siguiente)
Así, por ejemplo, decir que tengo una (usuario) guión "create_object_script", que "devuelve" algún objeto o conjunto de intereses, entonces pueden convertirlo en JSON (es decir, una lista de HashMaps) de la siguiente manera:
Object returnVal = engine.eval(create_object_script);
engine.put("output", returnVal);
BasicDBObject objFactory = new BasicDBObject(); // (or JSON equivalent)
BasicDBList listFactory = new BasicDBList(); // (or JSON equivalent)
BasicDBList outList = new BasicDBList(); // (or JSON equivalent)
engine.put("objFactory", objFactory);
engine.put("listFactory", listFactory);
engine.put("outList", outList);
engine.eval(parsing_script); // (described below)
// "outList" is now populated with (in-memory) JSON representations of "returnVal"
Obviamente, si tiene control sobre el script "create_object_script" puede hacerlo en un solo paso; mis scripts son generados por el usuario, por lo que es necesario ocultar esta complejidad: los usuarios solo escriben scripts donde el "valor de retorno" es la última línea.
He escrito el "sintáctico_de_datos" here para mantener la longitud de esta publicación.
Funcionalmente esto funciona muy bien; No he desarrollado mucho en JS, así que es posible que haya formas más eficientes de hacerlo. (Nota: siempre necesito mis resultados en una lista, si no lo hace, podría pasar un "outObj" de BasicDBObject y escribir en ese caso en el caso de singleton).
Espero que esto ayude a alguien que se encuentre en mi situación a la 1 de la madrugada.