J'ai créé une appli web en struts qui utilise les...

cancel
Showing results for 
Search instead for 
Did you mean: 
dewi
Member II

J'ai créé une appli web en struts qui utilise les...

Bonjour,

J'ai créé une appli web en struts qui utilise les web services d'alfresco. Je me suis basé sur les exemples SDK pour la réaliser. Mais il y a quelques points bscurs pour moi, concernant la notion de ticket.

- J'ai créé la page de connexion. Dans mon code Java:
AuthenticationUtils.startSession(lgn, psw);
- Dans mon appli, je navigue, fait des recherches et autres choses, quand parfois cela me donne une erruer comme celle ci:
WSDoAllSender: password callback failed; nested exception is:
   org.alfresco.webservice.util.WebServiceException: Ticket could not be found when calling callback handler.
- j'ai donc cherché un peu comment faire une connexion plus propre. Sur le forum officiel, je trouve le post: http://forums.alfresco.com/viewtopic.php?t=7195&highlight=ticket qui me renvoie sur la page du wiki suivante: http://wiki.alfresco.com/wiki/Web_Service_Samples_for_Java
- Mon anglais étant très moyen, il y a plusieurs questions que je me pose:

Doit-on utiliser le code donné sur le wik lors de chaque appel à un web service ?:
// Get a reference to the
   AuthenticationServiceSoapBindingStub authenticationService =
      (AuthenticationServiceSoapBindingStub) new AuthenticationServiceLocator()
      .getAuthenticationService();
       
   // Start the session
   AuthenticationResult result = authenticationService
                                 .startSession(userName, password);
   String ticket = result.getTicket();


// business à faire


// End the session
   authenticationService.endSession(ticket);
Car dans ce cas je dois toujours garder quelque part le username et password pour appeler "authenticationService.startSession(userName, password);"

Et 2eme question: comment savoir quand utiliser
AuthenticationUtils.startSession(lgn, psw);
ou
AuthenticationResult result = authenticationService
                                 .startSession(userName, password);
   String ticket = result.getTicket();
?

Merci pour l'aide Smiley Happy
4 Replies
dewi
Member II

Re: J'ai créé une appli web en struts qui utilise les...

Si ma question est stupide, dites le moi aussi, hein ^^
dewi
Member II

Re: J'ai créé une appli web en struts qui utilise les...

Bon, d'après ce que j'ai compris, il faut établir une session avant chaque appel à un web service d'Alfresco. C'est ce que j'ai fait, et ça marche pour la plupart des cas. Mais dans ce cas précis:
public List<ContentResult> getRankedContent(String username, String password) throws ServiceException, AuthenticationFault, RemoteException {
      List<ContentResult> results = new ArrayList<ContentResult>();
      //—————————————-
      AuthenticationServiceSoapBindingStub authenticationService = (AuthenticationServiceSoapBindingStub) new AuthenticationServiceLocator()
      .getAuthenticationService();
      AuthenticationResult result = authenticationService.startSession(
            username, password);
      System.out.println("result: "+  result);
      
      
      //—————————————-      
      try {
         RepositoryServiceSoapBindingStub repositoryService = WebServiceFactory
               .getRepositoryService();

         // Define query
         Query query = new Query(Constants.QUERY_LANG_LUCENE, "TEXT:" + this.getText());
         // Execute the query with includeMetadata = true
         QueryResult queryResult = repositoryService.query(store, query,
               true);

         System.out.println("Statement: " +query.getStatement());
j'ai un "Ticket could not be found when calling callback handler" au niveau de l'appel de repositorry.query(store, query,   true);

Alors je ne sais pas trop comment faire. Croyant que c'était un problème d'initialisation de session, j'ai rajouté les arguments username et password ainsi que l'entre //—– dans la méthode getRankedContent, mais cela m'a donné le même résultat que sans.
A noter que le result me renvoie bien un string représentant le ticket, mais je n'ai pas saisi comment l'utiliser Smiley Sad

Please help
thomasb
Member II

Re: J'ai créé une appli web en struts qui utilise les...

AuthenticationUtils utilise en fait la méthode documentée dans Web Service Samples for Java et notamment la section Using the Ticket. WebServiceFactory de son côté crée les services en utilisant la méthode document à la toute fin de la page de Wiki, et donc tirant automatiquement partie de l'authentification réalisée avec AuthenticationUtils.

En résumé, pour appeler des Web Services, le schéma est:
  1. AuthenticationUtils.startSession(username, password);
  2. appels de Web Services (instances créées avec WebServiceFactory), à répéter autant de fois qu'on veut
  3. AuthenticationUtils.endSession();
dewi
Member II

Re: J'ai créé une appli web en struts qui utilise les...

Merci beaucoup Smiley Happy