0

我必须通过 SSJS 调用 Web 服务的方法。该方法的输入参数之一是结构体数组。Web 服务使用者是用 java 实现的。我想知道如何在 SSJS 中声明和实例化 java 结构数组。

该方法的签名是:

(短,短,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,短,java .lang.String , java.lang.String , ESTRUTURACHECKLIST[] )

我正在根据您的建议创建数组:

lst=new ArrayList();

var chk:xx.xxx.xxxx.xxxx.ESTRUTURACHECKLIST=new 
xx.xxx.xxxx.xxxx.ESTRUTURACHECKLIST();
chk.setCONTEUDOCHECKLIST("XXXX");
chk.setDESCRICAOCHECKLIST("CÓDIGO USUÁRIO");
lst.add(chk);

var chk1:xx.xxx.xxxx.xxxx..ESTRUTURACHECKLIST=new 
xx.xxx.xxxx.xxxx..ESTRUTURACHECKLIST();
chk1.setCONTEUDOCHECKLIST("TESTE");
chk1.setDESCRICAOCHECKLIST("NOME USUARIO");
lst.add(chk1);
var chk2:xx.xxx.xxxx.xxxx..ESTRUTURACHECKLIST=new 
xx.xxx.xxxx.xxxx..ESTRUTURACHECKLIST();
chk2.setCONTEUDOCHECKLIST("TESTE NOTES");
chk2.setDESCRICAOCHECKLIST("NOME NOTES");
lst.add(chk2);
arr=lst.toArray(); 

当我按照它的建议创建结构数组时,java 方法给出了错误并且无法识别最后一个数组。可以肯定的是,我通过删除数组更改了实例化 Web 服务客户端的类的签名,没有错误。我认为正在发生的是 java 类无法识别 SSJS 传递的具有指定结构数组的数组。

调用该方法的错误是:

执行 Javascript 动作表达式时出错脚本解释器错误,line=75,col=13:Java 方法 'xxxxx(number, number, string, string, string, string,string, string,string, string,string, [Ljava.lang. Object;)'on java class xx.xxxx.xxxx.xxx not found

4

2 回答 2

1

如果您需要给定对象的Java 数组,您可以首先将它们放入类似List的结构中,如 ArrayList 或 Vector,然后通过调用toArray方法检索 Java 数组。

这是一个可以帮助您的 SSJS 代码片段:

importPackage(java.util);
importPackage(br.com.mercantil.dmdws);

var lst,chk,arr;

lst=new ArrayList();

chk=new ESTRUTURACHECKLIST();
// ... do whatever you need to do to the object
lst.add(chk);

// ... repeat previous step if needed

arr=lst.toArray(); // this is the Java array

更新

如果您使用的方法无法处理 Object 数组,因为它要求数组属于某个类,您可以提供一个具有所需运行时类型的数组作为toArray方法的第一个参数。因为我不知道如何在 SSJS 中创建或转换这样的数组,所以我会在br.com.mercantil.dmdws.ESTRUTURACHECKLIST类中添加一个“帮助器”方法,如下所示

public static ESTRUTURACHECKLIST[] getJavaArray(int n) {
    return new ESTRUTURACHECKLIST[n];
}

并通过以下方式在上面的示例中创建数组:

arr=lst.toArray(ESTRUTURACHECKLIST.getJavaArray(lst.size()));
于 2017-07-31T19:24:42.270 回答
0

使用相关类的全名,包括包名,将起作用。例如,如果它需要传递一个 Java HashMap,你可以使用:

var myMap:java.util.HashMap = new java.util.HashMap();

这假设代码可以访问相关类,例如此处的 HashMap 类是可访问的,因为它是 XPages 可以访问的 Java 核心的一部分。

于 2017-07-28T11:35:13.053 回答