ssjsxpages中的java结构数组

ssjsxpages中的java结构数组,java,arrays,xpages,ssjs,Java,Arrays,Xpages,Ssjs,我必须通过SSJS调用web服务的方法。该方法的输入参数之一是结构数组。web服务使用者是用java实现的。我想知道如何在SSJS中声明和实例化java结构数组 该方法的签名为: (short,short,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,ESTRU

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

该方法的签名为:

(short,short,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操作表达式时出错
脚本解释器错误,第75行,第13列:Java方法“xxxxx”(数字,数字,字符串,字符串,字符串,字符串,字符串,字符串,[Ljava.lang.Object;)'在java类xx.xxxx.xxxx.xxx上找不到

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

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

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

如果您需要给定对象的Java数组,您可以首先将它们放入类似于列表的结构中,如ArrayList或Vector,以及战后ds通过调用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

更新

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

public static ESTRUTURACHECKLIST[] getJavaArray(int n) {
    return new ESTRUTURACHECKLIST[n];
}
并按以下方式创建上面示例中的数组:

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

“结构数组”是什么意思?它是某个类的数组吗?它是ListArray吗?你想调用的方法的确切签名是什么?这是一个由开发人员定义的Java类数组。如果我在计数时没有出错,那么你的方法的输入应该包含
2x number+7x string+1x number+2x string+1x array
,但是错误是表示您正试图使用
2x number+9x string+1x array
执行。它似乎是一个参数(number)缺少…实际上我有一个中间类,它接收2x number+9x string+1x array的签名,并调用问题语句中提到的签名方法,同时传递1x编号。表示结构的类在java中的名称为STRUTURACHECKLIST语句如下所示:ESTRUTURACHECKLIST[]chk=新的雌激素检查表[0]。我如何在SSJS中声明?在Java中应该有import语句来解决这个问题,或者它是一个与您看到的内容相邻的类。它可能位于您正在查看的任何内容的默认包中。在我的Java经验中,我没有遇到过这一点,Java编辑器通常会对此发出警告。因此,这个问题引用了Sun的一本书,说明它是不好的practice。它给出的原因之一——很难在中导入类,所以使用它——似乎就是您在这里遇到的问题。我不知道解决方案,除非您能给出一个包名。但上面引用的代码(例如,代码)与类相关包有关。请参阅下面的代码,其中仅介绍了结构和方法这与声明数组不同。'var chk:br.com.mercantil.dmdws.estruturanchecklist=new br.com.mercantil.dmdws.estruturanchecklist;chk.setCONTEUDOCHECKLIST(“XXXXXX”);chk.setdescripaChecklist(“CÓDIGO USUÁRIO”);这是使用全名所需要的方法。但请记住,
new
调用Java类的构造函数,而构造函数是一个方法,因此它必须是
var chk:br.com.mercantil.dmdws.estruturacillick=new br.com.mercantil.dmdws.estruturacillick()
从那里你应该可以测试和调试。但这是结构的语句。我可以这样做。我不能声明结构数组。在这种情况下,数组的语句是什么。我尝试了各种形状,但都不起作用。问题是,当调用web服务的java方法时,它不起作用ot将对象数组识别为数组数组并给出一个错误。如果没有关于正在调用的方法及其引发的异常的信息,很难找出问题的确切原因。您应该在此处提供这些信息。我在问题陈述中提供了更多详细信息。@MarcusLoza:您尝试过更新的解决方案吗?它有效吗?我有我还没有时间,但下周我将实施您建议的解决方案,我将在这里给出反馈。非常感谢!