Domino 9 und frühere Versionen > ND8: Entwicklung
Konsumieren eines Webservices mittels LotusScript über einen Java-Consumer
Mitch:
Hallo zusammen,
ich möchte einen Webservice (adhoc) konsumieren den ein Kunde bereitstellt. Dieser ist mittels UsernameToken geschützt.
Diese Informationen werden im SOAP-Header des Requests mitgeschickt, und - korrigiert mich wenn ich falsch liege - man kann den Header nur über einen Java-Webservice-Consumer manipulieren (SetCredentials reicht zumindest nicht aus). Ich habe dazu das hier gefunden: http://enerosweb.wordpress.com/2010/07/28/lotusdomino-8-5-webservice-consumer-manipulating-soap-header/
Jetzt benötige ich die Rückgabe des Webservices aber in meiner bestehenden Anwendung - und die ist in LotusScript geschrieben.
Daher versuche ich die generierte Java-Bibliothek mittels LS2J anzusprechen, scheitere aber bereits beim Erstellen des WS-Objektes.
Ich gehe wie folgt vor:
--- Code: ---Dim jSession As JavaSession
Dim jClass As JavaClass
Dim jWS As JavaObject
Set jSession = New JavaSession ()
Set jClass = jSession.GetClass("com.kundenname.anwendungsname.B_XXXXX_BindingStub")
Set jWS = jClass.CreateObject
--- Ende Code ---
Das resultiert aber in einem Java-Fehler:
java.lang.NoSuchMethodError: com/kundenname/anwendungsname.B_XXXXX_BindingStub.<init>()V.
Okay, die Klasse scheint ja auch Parameter zu benötigen:
--- Code: ---public B_XXXXX_BindingStub(java.net.URL endpointURL, javax.xml.rpc.Service service) throws lotus.domino.types.Fault {
super(endpointURL, service);
}
--- Ende Code ---
Mein Code müsste also so aussehen:
--- Code: ---(...)
Set jWS = jClass.CreateObject("(Ljava/net/URL;Ljavax/xml/rpc/Service;)V", jURL, jService)
--- Ende Code ---
Also habe ich versucht mir (ebenfalls über LS2J) die Parameter zu erstellen. jURL habe ich geschafft, aber bei bei jService finde ich auf teufel-komm-raus nicht die benötigten Parameter zum Initialisieren. Die Service-Klasse hat aber, wenn ich das richtig sehe, auch einen leeren Konstruktor: http://ws.apache.org/axis/java/apiDocs/org/apache/axis/client/Service.html
Aber damit laufe ich wieder in den gleichen Fehler wie oben.
Fragen:
1) Kennt jemand einen besseren Weg um mein eigentliches Vorhaben zu lösen (ansprechen eines via UsernameToken geschützten Webservice aus einem bestehenden, umfangreich mit LS geskripteten Systems)?
2) Weiß jemand wie ich die Binding-Klasse via LS2J initialisieren kann?
3) Sonstige Anmerkungen? :)
Beste Grüße,
Mitch
Mitch:
So, falls hier mal jemand auf ähnliche Probleme stoßen sollte:
Ich bin zwar etwas weiter gekommen - man muss die XXXXLocator Klasse verwenden und kommt dann darüber (theoretisch) an alles andere.
Aber das resultiert leider in einem Fehler:
lotus.domino.axis.ConfigurationException: No engine configuration file - aborting!
Und mit dieser Fehlermeldung findet man dann auch ein offizielles IBM Statement:
http://www-304.ibm.com/support/docview.wss?uid=swg1LO42772
Dort steht, kurz gesagt, Java-Webservice-Consumer mittels LS2J ansprechen geht nicht und wird niemals gehen.
Es ist als Bug eingestuft, der aber nicht gefixt werden wird, sondern als Einschränkung bestehen bleibt.
Austricksen lässt sich das leider scheinbar auch nicht, ich hatte versucht mir eine eigene Java-Klasse zu schreiben, die den Java-Consumer anspricht und diese dann via LS2J einzubinden, aber das resultiert in gleichem Fehler.
Ich werde wohl größere Teile der Anwendung umschreiben müssen.
Gruß,
Mitch
Ralf_M_Petter:
Ich verstehe jetzt das Problem noch nicht ganz. Warum packst du den Aufruf des Java Webservice Consumer nicht einfach in einen Java Agenten. Diesen Agenten kannst du dann von Lotusscript problemlos aufrufen. Für etwaige Parameterübergaben mache ich es immer so, dass ich ein Dokument erstelle in dem ich die Aufrufparameter reinschreibe und die NoteID dieses Dokuments an den Javaagenten übergebe. Dieser liest dann die Parameter aus dem Notesdokument und schreibt das Ergebnis wieder zurück. Dann kann der rufende Lotusscript Code die Daten aus dem Dokument auslesen.
Funktioniert in meinen Anwendungen prima. In Notes muss man halt oft einfach etwas seltsame Wege beschreiten, obwohl etwas auch sehr einfach gehen könnte.
m3:
--- Zitat von: Ralf_M_Petter am 24.05.12 - 19:47:24 ---Ich verstehe jetzt das Problem noch nicht ganz. Warum packst du den Aufruf des Java Webservice Consumer nicht einfach in einen Java Agenten. Diesen Agenten kannst du dann von Lotusscript problemlos aufrufen. Für etwaige Parameterübergaben mache ich es immer so, dass ich ein Dokument erstelle in dem ich die Aufrufparameter reinschreibe und die NoteID dieses Dokuments an den Javaagenten übergebe. Dieser liest dann die Parameter aus dem Notesdokument und schreibt das Ergebnis wieder zurück. Dann kann der rufende Lotusscript Code die Daten aus dem Dokument auslesen.
Funktioniert in meinen Anwendungen prima. In Notes muss man halt oft einfach etwas seltsame Wege beschreiten, obwohl etwas auch sehr einfach gehen könnte.
--- Ende Zitat ---
Performant ist anders ... ;)
Ralf_M_Petter:
--- Zitat von: m3 am 24.05.12 - 20:54:26 --- Performant ist anders ... ;)
--- Ende Zitat ---
Hast du es schon einmal probiert. Wir verwenden diese Agentlösung um Dialogboxen die mit Javaswing programmiert sind aufzurufen. Wenn man auf den Button in der Notesmaske drückt ist praktisch (<0,5 sec) sofort die Dialogbox da. Also so unperformant ist das nicht.
Grüße
Ralf
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln