Thanks for the reply Mark. I tried various versions of this but
couldn't get them to work. I'll post code if this is working for
everyone else. What I see is that my wrap factory gets invoked if I do
like:

var s = request.getParameter("s");
s = String(s);

But I don't want to force callers to remember that Java strings need
to be explicitly converted.

Here's the WrapFactory I use in ESXX:

// Provide a better mapping for primitive types on this context
WrapFactory wf = new WrapFactory() {
    @Override public Object wrap(Context cx, Scriptable scope,
                                 Object obj, Class<?> static_type) {
      if (obj instanceof char[]) {
        return new String((char[]) obj);
      }
      else {
        return super.wrap(cx, scope, obj, static_type);
      }
    }
  };
wf.setJavaPrimitiveWrap(false);
cx.setWrapFactory(wf);

I convert char[] into JavaScript strings because of java.io.Console.readPassword(). And here's how it behaves:

esxx> javastring=new java.lang.String("A string")
-> NativeJavaObject:
-> `A string´
esxx> typeof javastring
-> `object´
esxx> javastring.getClass()
-> NativeJavaObject:
-> java.lang.cl...@12452e8:
-> class java.lang.String
esxx> javastring.toString()
-> `A string´
esxx> typeof javastring.toString()
-> `string´

Isn't this what you want?

--
---- Martin Blom --------------------------- [email protected] ----
Eccl 1:18                                 http://martin.blom.org/


_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to