0

SSJS を介して Web サービスのメソッドを呼び出す必要があります。メソッドの入力パラメーターの 1 つが構造体配列です。Web サービス コンシューマーは Java で実装されます。SSJS で Java 構造体配列を宣言してインスタンス化する方法を知りたいです。

メソッドのシグネチャは次のとおりです。

(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 アクション式の実行中にエラーが発生しました スクリプト インタープリター エラー、行 = 75、列 = 13: Java メソッド 'xxxxx(数値、数値、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、文字列、[Ljava.lang. Object;)' on Java クラス xx.xxxx.xxxx.xxx が見つかりません

4

2 に答える 2

1

特定のオブジェクトのJava 配列が必要な場合は、最初にそれらをArrayList や Vector などのListのような構造に配置し、その後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 に答える