【问题标题】:Invoking method on a Java class from lotus script (LS2J)从 Lotus 脚本 (LS2J) 调用 Java 类的方法
【发布时间】:2014-05-28 13:21:13
【问题描述】:

最有尊严的开发者,

我在从 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 脚本中迭代类对象的类方法以获得所需参数的签名。

但是当我尝试调用该方法时,我得到一个LS2J: Parameter mismatch calling Method myMethod

我已经在 J​​avaObject 上尝试了点符号(不,我没有使用 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 lotus-notes lotusscript ls2j


【解决方案1】:

您正在使用正确的方法来调用您的 Java 方法,但您不能将 Notes 后端对象作为参数传递。

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

或者,将您的 Lotusscript 逻辑迁移到 Java :-)

【讨论】:

  • 啊,他们应该在帮助中用粗体、红色和字体大小 28 显示。 ;) 是的,这个 ls2j 考验主要是我的一个想法,即为那些只有 LS 的内部人员围绕我的 java util 类编写一个“包装器”。幸运的是,我从未向任何人承诺过任何事情;)
【解决方案2】:

也许你不需要 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

【讨论】:

  • 感谢 Casper 的快速回复,但您确定吗?这使我出现Instance member MYMETHOD does not exist 错误。
  • 我添加了一个完整的工作示例,也许它更有意义。
  • 欣赏卡斯帕。我猜我的错误是调用非静态方法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
相关资源
最近更新 更多