SSJS xpages中的java结构数组

时间:2017-07-28 11:29:08

标签: java arrays xpages ssjs

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

该方法的签名是:

(short,short,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String, short,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(数字,数字,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,[Ljava.lang.Object;)'在java上找不到类xx.xxxx.xxxx.xxx

2 个答案:

答案 0 :(得分:1)

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

这是一个可以帮助您的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中创建或投射这样的数组,我会添加一个&#34;帮助&#34; br.com.mercantil.dmdws.ESTRUTURACHECKLIST类的方法,看起来像这样

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

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

arr=lst.toArray(ESTRUTURACHECKLIST.getJavaArray(lst.size()));

答案 1 :(得分:0)

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

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

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