Lotus Notes:Java fonctionne correctement sur un agent, mais échoue sur une bibliothèque Java

StackOverflow https://stackoverflow.com//questions/22051912

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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top