public void query(String sql, QueryResult queryResult) {
q = queryResult;
realQuery(sql, conString);
}
public static native void realQuery(String sql, String conString) /*-{
$wnd.pg.connect(conString, function(err, client) {
client.query(sql, function(err, result) {
console.log(result.rows);
var code = "@db.tud.bp.werkstatt.client.PgClient::result(Ljava/lang/String;)(" + '"' + JSON.stringify(result.rows).replace('"','\\"') + '"' + ");";
console.log(code);
eval(code);
});
});
}-*/;
I get this error:
com.google.gwt.event.shared.UmbrellaException: Exception caught: (Error)
@de.tud.bp.werkstatt.client.PgClient::realQuery(Ljava/lang/String;Ljava/lang/String;)
([string: 'SELECT age FROM person WHERE name='Ayeb'', string: '/rest/query']):
unrecognized calling format
at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:129)
What does “unrecognized calling format” mean, and why do I not get any Google results when searching for it?
I suspect that I am calling the JSNI function in a wrong way in line 3. But I am AFAIK following all rules specified in the docs here.
EDIT:
This works:
public static native void realQuery(JavaScriptObject parsed) /*-{
var sql = parsed[0];
var conString = parsed[1];
$wnd.pg.connect(conString, function(err, client) {
});
}-*/;
This doesn’t:
public static native void realQuery(JavaScriptObject parsed) /*-{
var sql = parsed[0];
var conString = parsed[1];
$wnd.pg.connect(conString, function(err, client) {
client.query(sql, function(err, result) {
console.log(result.rows);
});
});
}-*/;
You can’t
evalJSNI invocations into Java – that code is not real JavaScript, but is part of how JS and Java interact within GWT. The way this ends up working is that those invocations are rewritten so that they call the real JavaScript function.