首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从lotus (LS2J)调用Java类上的方法

从lotus (LS2J)调用Java类上的方法
EN

Stack Overflow用户
提问于 2014-05-28 13:21:13
回答 2查看 3.9K关注 0票数 8

最有尊严的开发者

我很难从lotus代理调用我自己的java类上的方法。

我的Java类简化如下所示

代码语言:javascript
复制
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

我尝试过在JavaObject上使用点符号(不,我不使用Mac;)和ADT。

代码语言:javascript
复制
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)

和分别

代码语言:javascript
复制
Dim jMethod as JavaMethod
...

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

此外,我还添加了错误处理(OnError ..)打印出任何JavaError (+ stacktrace)的结果,但是结果都是空的,因此没有进一步的线索。

我使用的是设计版本9.0

有什么想法/指点/陷阱吗?快让我秃顶了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-28 15:02:20

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

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

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

票数 9
EN

Stack Overflow用户

发布于 2014-05-28 13:42:37

也许你不需要CreateObject..。

我就是这样做的:

代码语言:javascript
复制
Dim jSession As New JavaSession()
Dim jClass As JavaClass()
Set jClass = jSession.GetClass("MyClass")

If jClass.myMethod(doc) Then

添加完整示例

代码语言:javascript
复制
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:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23912808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档