0

我正在尝试从 Java 调用一个可以正常工作的适配器

DataAccessService service = WorklightBundles.getInstance().getDataAccessService();
ProcedureQName procedure = new ProcedureQName(adapterName,adapterProc);
service.invokeProcedure(procedure, String);

当上述 invokeProcedure 中的字符串必须作为输入传递给被调用的适配器时,问题就出现了。当不需要参数时它可以工作,但是当我传递一个字符串(例如“Hello”)时它会中断。原因是,当它被调用时,在 String 参数中传递的值不会被Javascript adapter-impl.js 解析。因此抛出一个错误说

由于运行时传递的字符串参数中的无效字符(“H”第 1 行),无法调用适配器名称/过程名称

我尝试使用com.ibm.json.java.*包中的JSONArray/JSONObject,但错误仍然存​​在。

所以尝试使用invokeProcedure(ProcedureQName,JSONArray,long nRequestID). 就像是,

service.invokeProcedure(procedure, objArray,-1)

令人惊讶的是,这目前工作正常。我想了解是否,

  1. 是这种情况的正确方法,并且
  2. 将来使用invokeProcedure的3个参数重载会有什么问题吗?

请帮忙。

4

1 回答 1

2

您需要将参数作为字符串化数组传递。例如

service.invokeProcedure(procedure, "[1,2,3,4]");
service.invokeProcedure(procedure, "[1,2,'three','four']");
service.invokeProcedure(procedure, "[1,2,true,false]");

如果是单个参数,只需执行一个具有单个值的数组

service.invokeProcedure(procedure, "['myStringParam']");

另一种选择是创建 JSONArray 对象并将其字符串化。

于 2015-01-06T16:04:08.317 回答