client de service Web Java, ajoutant des en-têtes http
Avoir créé un service web java client à l'aide de wsimport sur un wsdl, j'ai besoin de l'Autorisation d'en-tête pour chaque message soap incorporé dans une requête http. Ayant généré une sous-classe de javax.xml.ws.Service, comment puis-je ajouter un en-tête http à chaque sortie d'une demande???
source d'informationauteur murungu
Vous devez vous connecter pour publier un commentaire.
Vous pouvez passer d'une carte avec des en-têtes personnalisés à la BindingProvider (je crois que vous pouvez définir le MessageContext.HTTP_REQUEST_HEADERS de la propriété). Essayez de créer un en-tête d'Autorisation et de la passer en.
Voici le code, basé sur Femi de réponse.
Il peut être un peu difficile à comprendre. Fonctionne à merveille!
Par souci d'exhaustivité et d'aider les autres dans des situations similaires, je voudrais illustrer la solution la plus propre à mon humble avis à l'aide de l'JAX-WS-gestionnaire de la chaîne d':
1) la Sous-classe de votre service de classe (pas le port de classe) dans un autre (non généré). Parce que le service de classe (et de son ensemble) a probablement été généré à partir d'un WSDL, vos modifications à la sous-classe ne sont pas perdus, lorsque vous mettez à jour votre service de classe après un WSDL changement.
2) Annoter votre service-sous-classe comme ceci (import
javax.jws.HandlerChain
):3) Créer un fichier appelé
HandlerChain.xml
dans le même package que votre service à la sous-classe, c'est à dire à côté deMyService
avec le contenu suivant:Vous pouvez ajouter plusieurs
<handler>
éléments, btw.Et assurez-vous que ce fichier se termine vraiment dans votre BOCAL! Par exemple, lors de l'utilisation de Maven, vous devez placer soit dans
${project}/src/main/resources/
(au lieu de${project}/src/main/java/
) ou vous devez changer votre build-configuration de prévoir des ressources de lajava
-dossier de! Je vous recommande le dernier, parce que c'est gênant d'avoir un parallèle paquet-structure dans leresources
-dossier, qui est souvent oublié lors de refactorings.4) mettre en Œuvre votre
HttpHeaderExtensionSOAPHandler
-- semblable à ceci:Dans mon exemple ci-dessus (et dans mon productif code) - je obtenir les données à transmettre en-têtes de requête HTTP à partir d'un
ThreadLocale
c'est à dire mon actuel contexte du thread. Depuis cetteWebserviceContext
est ma classe personnalisée, vous aurez besoin de mettre en place votre propre façon d'accéder à vos données.lorsque vous envoyez en Message mode, vous pouvez également passer MimeHeaders sur le Message SOAP, qui finira par se traduire par des en-têtes http, j'.e: