JAX-WS client: maintenir la session et les cookies à travers de multiples services
J'utilise Netbeans pour créer automatiquement un webservice clients basé sur des fichiers WSDL. Cela fonctionne bien, sauf le webservices je suis à l'aide d'exiger que je passe personnalisé dans un cookie dans l'en-tête HTTP pour chaque webservice afin de prouver mon identité.
- Je utiliser un webservice nommé Utility
pour obtenir mon autorisation. Cela définit un cookie qui doit être fourni dans tous les appels ultérieurs à tout webservice.
Ceci peut être accompli par la mise en javax.xml.ws.session.maintain
à true
sur le BindingProvider du port pour le webservice. Cela fonctionne très bien pour tous les appels suivants aux méthodes des Utility
webservice.
Le problème, c'est que ce ne maintient de la session/cookie pour un webservice. J'ai besoin d'elle à travers les autres.
J'ai besoin de le cookie transmis à un séparé webservice nommé History
Comment puis-je accomplir? Est-il possible d'avoir un super classe de Service dont l'Utilité et l'Histoire pourrait s'étendre et de partager le même état de session?
OriginalL'auteur bradvido | 2013-02-05
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution.
Vous pouvez obtenir des en-têtes de réponse à l'aide de ce après que vous avez effectué l'appel:
Trouver le
Set-Cookie
en-tête et de stocker sa valeur.Puis avant votre prochaine demande (en tout webservice) vous pouvez définir l'en-tête de Cookie:
OriginalL'auteur bradvido
Seulement commenter parce que la solution ci-dessus ne fonctionne pas pour moi. J'ai eu UnsupportedOperationException. Je crois que problème a été causé parce que singletonMap n'autorise pas les modifications. xml en-têtes ont été également nécessaires, alors je l'ai mis en premier.
Vous devriez passer en revue le code pour le rendre plus compact, sachant MessageContext.HTTP_REQUEST_HEADERS == "javax.xml.ws.http.demande.les en-têtes"
Sa version est en fait un char plus courte, même y compris des citations, mais je sais ce que tu veux dire. À l'aide d'une constante est certainement plus sûr. 🙂
OriginalL'auteur user3731525