簡體   English   中英

從lotus腳本(LS2J)調用Java類的方法

[英]Invoking method on a Java class from lotus script (LS2J)

最有尊嚴的開發者,

我在從Lotus腳本代理調用我自己的java類中的方法時遇到問題。

我簡化的Java類看起來像這樣

import lotus.domino.*;

public class MyClass{
   /* .. omitted constructor and other methods .. */

   public void myMethod(Document doc){
      /* ... do things with the document object ...*/
   }

}

現在這個類包含在正確的use語句中,我可以在lotus腳本中迭代class對象上的classmethods來獲取所需參數的簽名。

但是當我嘗試調用該方法時,我得到一個LS2J: Parameter mismatch calling Method myMethod

我在JavaObject上嘗試了點符號(不,我沒有使用Mac;))和ADT

Dim doc as NotesDocument
Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jObject As JavaObject

...

Set jSession = New JavaSession()
Set jClass = jSession.Getclass("MyClass")

Set jObject = jClass.Createobject()
Call jObject.myMethod(doc)

和分別

Dim jMethod as JavaMethod
...

Set jMethod = jClass.Getmethod("myMethod", "(Llotus/domino/Document;)V")
tmp = jMethod.Invoke(jObject,doc)

此外,我添加了錯誤處理(OnError ..)來打印出任何JavaError(+ stacktrace)的結果,但它們最終為空,因此沒有進一步的線索。

我正在使用Designer 9.0版

任何想法/指針/陷阱? 它讓我禿頂。

您正在使用正確的方法來調用Java方法,但是您無法將Notes后端對象作為參數傳遞。

例如,您可以使用文檔通用ID解析字符串,然后在Java方法中使用通用ID查找文檔。

或者,將您的Lotusscript邏輯遷移到Java :-)

也許你不需要CreateObject ..

我是這樣做的:

Dim jSession As New JavaSession()
Dim jClass As JavaClass()
Set jClass = jSession.GetClass("MyClass")

If jClass.myMethod(doc) Then

完整示例添加

Java class:
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;

public class GetFileFromUrl {

    public static boolean getFileFromUrl(String imageUrl, String filePath) {
        try {
            URL url = new URL(imageUrl);
            InputStream is = url.openStream();
            OutputStream os = new FileOutputStream(filePath);
            byte[] b = new byte[2048];
            int length;
            while ((length = is.read(b)) != -1) {
                os.write(b, 0, length);
            }
            is.close();
            os.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }
}

LotusScript中:

UseLSX "*javacon"  
Use "GetFileFromUrl"

Private Function GetFileFromUrl(url As String, outputPath As String) As Boolean
    Dim jSession As New JavaSession
    Dim jClass As JavaClass
    Set jClass = jSession.GetClass("GetFileFromUrl")
    If jClass.getFileFromUrl(url, outputPath) Then
        GetFileFromUrl = True
    End If
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM