List of usage examples for jdk.nashorn.api.scripting ScriptObjectMirror wrapAsJSONCompatible
public static Object wrapAsJSONCompatible(final Object obj, final Object homeGlobal)
From source file:org.eclairjs.nashorn.Utils.java
License:Apache License
public static Object jsToJava(Object o) { if (o != null && !(o instanceof Undefined)) { logger.debug("jsToJava" + o.getClass().getName()); } else {/*from w w w. j a v a 2 s . c om*/ return o; } if (o instanceof jdk.nashorn.internal.objects.NativeArray) { Object array[] = ((NativeArray) o).asObjectArray(); ArrayList al = new ArrayList(); for (int i = 0; i < array.length; i++) { al.add(jsToJava(array[i])); } return al.toArray(); } if (o.getClass().isPrimitive()) return o; String packageName = o.getClass().getCanonicalName(); switch (packageName) { case "java.lang.String": case "java.lang.Integer": case "java.lang.Float": case "java.lang.Double": case "java.lang.Boolean": case "java.lang.Long": case "org.json.simple.JSONObject": case "java.lang.Object[]": case "java.lang.String[]": case "scala.Tuple2": case "scala.Tuple3": case "scala.Tuple4": return o; } if (packageName.startsWith("org.apache.spark")) return o; if (o instanceof WrappedClass) return ((WrappedClass) o).getJavaObject(); if (o instanceof ScriptObjectMirror) { ScriptObjectMirror m = (ScriptObjectMirror) o; if (m.hasMember("getJavaObject")) { return m.callMember("getJavaObject"); } if (m.isArray()) { try { if (m.containsKey("0")) { Object v = m.get("0"); if (v instanceof Double) { double[] doubleArray = (double[]) ScriptUtils.convert(m, double[].class); return doubleArray; } else if (v instanceof Integer) { int[] intArray = (int[]) ScriptUtils.convert(m, int[].class); return intArray; } else { Object[] objectArray = (Object[]) ScriptUtils.convert(m, Object[].class); return objectArray; } } } catch (ClassCastException e) { /* If the array contains ScriptObjectMirror the above conversions throws exception so we have to convert the contents of the array as well. */ ArrayList list = new ArrayList(); for (Object item : m.values()) { list.add(jsToJava(item)); } Object x = list.toArray(); return x; } } else { // throw new RuntimeException("js2java IMPLEMENT"+o); Object obj = ScriptObjectMirror.wrapAsJSONCompatible(o, null); String j = JSONValue.toJSONString(obj); return JSONValue.parse(j); } } else if (o instanceof jdk.nashorn.internal.runtime.ScriptObject) { ScriptObjectMirror jsObj = ScriptUtils.wrap((jdk.nashorn.internal.runtime.ScriptObject) o); if (jsObj.hasMember("getJavaObject")) { return jsObj.callMember("getJavaObject"); } } else if (o instanceof java.util.ArrayList) { ArrayList list = (ArrayList) o; int size = list.size(); for (int i = 0; i < size; i++) list.set(i, jsToJava(list.get(i))); return list; } else if (o instanceof StaticClass) { return o; } logger.warn("js2java NOT HANDLED " + packageName); return o; // Just return the Java object, it might user created like java.net.Socket //new RuntimeException().printStackTrace(); //throw new RuntimeException("js2java NOT HANDLED "+packageName); }
From source file:org.eclairjs.nashorn.Utils.java
License:Apache License
private static Object wrapObject(Object o) { Logger logger = Logger.getLogger(Utils.class); if (o instanceof String || o instanceof Number) { return o; }//from w ww .j a v a 2 s . c o m logger.debug("wrapAsJSONCompatible " + o); return ScriptObjectMirror.wrapAsJSONCompatible(o, null); }
From source file:org.eclairjs.nashorn.Utils.java
License:Apache License
public static String toJSON(ScriptObjectMirror som) { som = (ScriptObjectMirror) ScriptObjectMirror.wrapAsJSONCompatible(som, null); Map hashmap = new HashMap<>(); for (Map.Entry<String, Object> entry : som.entrySet()) { String key = entry.getKey().toString(); Object value = entry.getValue(); boolean ignore = false; if (value != null) { String clsName = value.getClass().getName().toString(); switch (clsName) { case "java.lang.String": case "java.lang.Boolean": case "java.lang.Long": case "java.lang.Float": case "java.lang.Double": ignore = false;// w w w .j a v a 2 s. com break; default: ignore = true; } } if (!ignore) hashmap.put(key, value); } String j = JSONValue.toJSONString(hashmap); return j; }