Вызов метода класса Java из сценария лотоса (LS2J)

Самые достойные разработчики,

У меня возникли проблемы с вызовом метода в моем собственном классе Java из агента сценария лотоса.

Мой упрощенный класс Java выглядит так

import lotus.domino.*;

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

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

}

Теперь этот класс включен в оператор правильного использования, и я могу перебирать методы класса для объекта класса в сценарии лотоса, чтобы получить сигнатуру необходимых аргументов.

Но когда я пытаюсь вызвать метод, я получаю 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 (+ трассировка стека), но они оказываются пустыми, поэтому никаких дополнительных подсказок нет.

Я использую Конструктор версии 9.0.

Любые идеи/указатели/ошибки? Это делает меня лысым.


person Erik Backman    schedule 28.05.2014    source источник
comment
проголосуйте за открытие вопроса › достойно :) нравится   -  person YdB    schedule 12.11.2015


Ответы (2)


Вы используете правильный подход к вызову метода Java, но не можете передавать объекты бэкэнда Notes в качестве параметров.

Например, вы можете проанализировать строку с универсальным идентификатором документа, а затем в своем методе Java найти документ, используя универсальный идентификатор.

В качестве альтернативы, перенесите свою логику Lotusscript на Java :-)

person Per Henrik Lausten    schedule 28.05.2014
comment
Ах, они должны выделить это жирным шрифтом, красным и размером шрифта 28 в справке. ;) И да, это испытание ls2j было в основном моей идеей написать оболочку вокруг моего класса java util для тех, кто работает только с LS. К счастью, я никому ничего не обещал ;) - person Erik Backman; 28.05.2014

Возможно, вам не нужен 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;
        }
    }
}

Лотоскрипт:

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
person Casper Skovgaard    schedule 28.05.2014
comment
Каспер, спасибо за быстрый ответ, но ты в этом уверен? Это выдает мне ошибку Instance member MYMETHOD does not exist. - person Erik Backman; 28.05.2014
comment
Я добавил полный рабочий пример, может быть, это имеет больше смысла. - person Casper Skovgaard; 29.05.2014
comment
Цени это, Каспер. Я предполагаю, что моя ошибка вызывала нестатический метод;) - person Erik Backman; 30.05.2014