Lotus Notes:Java fonctionne correctement sur un agent, mais échoue sur une bibliothèque Java
-
21-12-2019 - |
Question
J'ai créé un consommateur de service Web.Je veux appeler une méthode nommée setCredentials
afin que je puisse transmettre mes informations d'authentification au service.
J'ai deux entités qui importent le consommateur du service Web, un agent et une bibliothèque Java, destinées à être appelées depuis LotusScript.
Ce qui est étrange c'est que sur mon agent tout fonctionne bien.La bibliothèque compile correctement, mais lorsqu'elle est exécutée à partir de LotusScript et atteint cette lignestub.setCredentials("xxxx","ttttt");
Java lance un java.lang.nosuchmethod
erreur.Que puis-je faire de mal ?
Merci beaucoup d'avance pour votre aide.
Mise à jour:
Peut-être que je n'ai pas expliqué complètement.L'action se produit entièrement à l'intérieur de Java.C'est une sorte de test.Sur LotusScript, j'appelle simplement le constructeur avec la séquence GetClass/CreateObject.Le code est à l'intérieur du constructeur (à des fins de test).Et cela ressemble exactement à la même chose, à la fois sur mon agent de test et sur la bibliothèque Java.Pour répondre à votre question, Jason, non, setCredentials fait partie d'une certaine interface lotus.domino.types.PortTypeBase.Lorsque je consomme le .wsdl pour créer un consommateur de service Web, je peux voir dans les fichiers .java générés que mon interface étend portTypeBase et Remote.
La solution
Il n'est pas possible d'appeler un consommateur de service Web Java à partir de LotusScript (LS2J).Ceci est détaillé dans SPR SODY7UDKE8 / APAR LO42772.Cela s'applique également à l'appel d'un agent Java qui à son tour appelle un consommateur Java.
Vous devrez créer un consommateur LotusScript pour accéder au service Web dans LotusScript.Cependant, il existe des limitations connues dans LotusScript qui peuvent empêcher l'utilisation de certains services Web.
- Limite de variable/méthode à 40 caractères
- Des messages SOAP extrêmement volumineux peuvent entraîner des problèmes de performances/plantages.
- Incompatibilité des mots clés réservés dans LS/WSDL/SOAP.
Cela dit, j'ai créé l'exemple de fournisseur suivant.
Class wsClass
Function hello ( helloText As String) As String
hello = "Hello " + helloText
End Function
End Class
Dans le NSF, il a été stocké, je l'ai configuré pour autoriser uniquement les utilisateurs authentifiés.
J'ai ensuite créé une bibliothèque LS consumer et Java Consumer à partir du WSDL généré.
Après cela, j'ai créé l'exemple de code suivant.
LotusScript
Use "LsWebServiceConsumer"
Sub Initialize
Dim stub As New Wsclass
Dim answer As String
Call stub.Setcredentials("testuser", "password")
answer = stub.Hello("world")
MsgBox answer
End Sub
JAVA (ajout d'une bibliothèque de consommateurs à l'agent)
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
WsClass stub = new WsClassServiceLocator().getDomino();
stub.setCredentials("testuser", "password");
System.out.println(stub.HELLO("world"));
} catch(Exception e) {
e.printStackTrace();
}
}
}
Ces deux éléments ont fonctionné comme prévu avec leur propre consommateur respectif.