Domino 9 und frühere Versionen > ND8: Entwicklung

LS Java-Method aufrufen

(1/1)

magic_halli:
Hi,

ich will mittels LS bzw. LS2J einen Konstruktor einer Klasse und direkt im Anschluß eine Java-Methode dieser Klasse aufrufen.
Ich werd echt noch blöd - es klappt nicht. Ich hab die Hilfe hoch und runter gelesen und die LS-Syntax zig-fach geändert...
Irgendwie hab ich ein Syntaxproblem im LS und sehe es mittlerweile nicht mehr?!

--- Code: ---Set jSession = New JavaSession()

'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")

'Methode ausführen + Rückgabewert
Dim neuePostNr As String
neuePostNr = myMethod.Invoke(,myMethodInputString)

--- Ende Code ---
Ich erhalte als Fehler "LS2J Error: Invoke needs JavaObject parameter to call an instance method. createPost"!
Klar, denn ich bringe das JavaObject 'myObject' hier nicht ins Spiel.
Doch wie ich auch die Hilfebeispiele implementiere (verschiedenste Syntaxen schon probiert), ich kann einfach nicht meine Methode aufrufen (ständig kommen, je nach Implementierung, andere Meldungen)!

Wie geht ihr denn vor, um:
1. Konstruktor zu initialisieren (JavaObject) inkl. Parameterübergabe
2. eine Methode, nach Konstrukor-Init, mit Input- und Output-Parametern im Anschluß aufzurufen?

Danke und Gruß

Rico.

magic_halli:
...hier mal noch ne andere Syntax, lt. Hilfe, die doch eigentlich korrekt wäre?!

--- Code: ---Set jSession = New JavaSession()

'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")

'Methode ausführen + Rückgabewert
Dim neuePostNr As String
'neuePostNr = myMethod.Invoke(,myMethodInputString)
neuePostNr = myObject.myMethod(myMethodInputString)

--- Ende Code ---

Meldung: "Instance member MYMETHOD does not exist"! Klappt auch nicht... es ist zum piepen.

it898ur:
Hallo,

hier ein Musteraufruf aus einem meiner Scripte:

' Javaverbindung aufbauen
Set jsession = New JavaSession()                              
' Javasession starten
' Klasse laden
Set Crc32Class = jsession.GetClass("JavaCRC32")   

' Instanz mit aktueller Datei (String) erzeugen
Set Crc32Object = Crc32Class.CreateObject("(Ljava/lang/String;)V", Datei)

' weiteren Parameter setzen
sCrc32.setTyp("1")   

' Rückgabewert lesen
sCrc32 = Crc32Object.getCrc32()

Ich hoffe das hilft !

Gruß

André

magic_halli:
So, ich hab´s gelöst! Ich kann nun erfolgreich meine Methode aufrufen und deren Rückgabewert verarbeiten! Man muss eben nur mal drüber reden... dann hats klick gemacht!  ;)

--- Code: ---'Input-Parameter für Konstruktor
Dim myKonstruktorInputString As String
myKonstruktorInputString = "eingabeWert"

'Input-Parameter für Methode
Dim myMethodInputStringVariable As String
myMethodInputStringVariable = "einWert"


Set jSession = New JavaSession()

'Klasse
Set myClass = jSession.GetClass("de/ibees/notes/addin/NotesAddIn")
'Konstruktor (hat 1 String-Input Parameter)
Set myObject = myClass.CreateObject("(Ljava/lang/String;)V",myKonstruktorInputString)
'Methode (hat 1 String-Input und 1 String-Output Parameter)
Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")

'Methode ausführen + Rückgabewert speichern
Dim neuePostNr As String
neuePostNr = myMethod.Invoke(myObject,myMethodInputStringVariable)

--- Ende Code ---

Danke und Gruß

Rico.

flaite:
Wieso rufst du eigentlich Methoden mit dieser - ich nenn das mal - Introspection-Syntax auf.
Bei einfachen Datentypen würde doch ein einfacher Aufruf genügen, oder etwa nicht.


--- Code: ---neuePostNr = myObject(myMethodInputStringVariable)

--- Ende Code ---
statt

--- Code: ---Set myMethod = myClass.GetMethod("createPost","(Ljava/lang/String;)Ljava/lang/String;")
neuePostNr = myMethod.Invoke(myObject,myMethodInputStringVariable)

--- Ende Code ---




Ich nehm immer einen leeren Konstruktor für die Java Klasse und setz die Properties mit einfachen Methodenaufrufen. Solange man Strings, java.util.Date oder Primitivtypen (int, double und sowas) übergeben muss, ist das völlig ausreichend und einfacher zu schreiben.


--- Code: ---Set myObject = myClass.CreateObject();
myObject.init(myKonstruktorInputString);

--- Ende Code ---
Dafür besitzt die Klasse de/ibees/notes/addin/NotesAddIn.java einen leeren Konstruktor und der code, der jetzt im Konstruktor ist, befindet sich in einer Methode public void init (String).

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln