Envoi d'en-têtes de transport avec JAX-WS
Vous pouvez activer un client existant de services Web JAX-WS (Java™ API for XML-Based Web Services) afin que des informations définies par l'application puissent être envoyées en même temps que vos demandes de service web par le biais d'en-têtes de transport. En outre, vous pouvez activer un noeud final de services Web JAX-WS pour qu'il envoie des informations définies par l'application avec le message de réponse des Web à l'aide d'en-têtes de transport.
Avant de commencer
Vous avez besoin d'un client de services Web JAX-WS que vous pouvez activer pour envoyer des en-têtes de transport.
L'envoi d'en-têtes de transport est pris en charge par les clients de services Web JAX-WS, et pour les transports HTTP et JMS. Le client de services web doit appeler directement les API JAX-WS et ne pas passer par les couches intermédiaires comme la fonction de passerelle.
Pourquoi et quand exécuter cette tâche
Lors de l'utilisation du modèle de programmation JAX-WS, le client doit définir une propriété sur l'objet RequestContext de BindingProvider pour l'envoi de valeurs dans les en-têtes de transport avec le message de demande de services Web. Une fois la propriété définie, les valeurs sont définies pour toutes les demandes liées aux appels de méthode distante ultérieurs sur l'objet BindingProvider jusqu'à ce que la propriété associée soit définie à null ou que l'objet BindingProvider soit supprimé.
Pour envoyer des valeurs dans des en-têtes de transport sur des demandes sortantes à partir d'une application client de services Web JAX-WS, modifiez le code client comme suit :
Procédure
Résultats
Vous disposez d'un client de services Web JAX-WS configuré pour l'envoi d'en-têtes de transport dans les messages de demande des services Web.
Exemple
public class MyApplicationClass {
// Inject an instance of the service's port-type.
@WebServiceRef(EchoService.class)
private EchoPortType port;
// This method will invoke the web service operation and send transport headers on the request.
public void invokeService() {
// Set up the Map that will contain the request headers.
Map<String, Object> requestHeaders = new HashMap<String, Object>();
requestHeaders.put(“MyHeader1”, “This is a string value”);
requestHeaders.put(“MyHeader2”, new Integer(33));
requestHeaders.put(“MyHeader3”, new Boolean(true));
// Set the Map as a property on the RequestContext.
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);
// Invoke the web services operation.
String result = port.echoString(“Hello, world!”);
}
}
Envoi d'en-têtes de transport de réponse à partir d'un noeud final JAX-WS
Avant de commencer
L'envoi d'en-têtes de transport de réponse à partir d'un noeud final JAX-WS est similaire à l'envoi d'en-têtes de transport de demande à partir d'un client JAX-WS. Il est pris en charge pour les transports HTTP et JMS.
Pourquoi et quand exécuter cette tâche
Procédure
- Créez un objet java.util.Map contenant les en-têtes de transport.
- Ajoutez une entrée (clé et valeur) à l'objet Map pour chaque en-tête de transport à envoyer dans le message de réponse. Cette procédure est similaire à celle du client.
- Extrayez l'objet MessageContext (instance de javax.xml.ws.handler.MessageContext) associé à l'appel du noeud final.
- Définissez l'objet Map sur l'objet MessageContext à l'aide de la propriété com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES.
Résultats
Exemple
@WebService
public class EchoServiceImpl implements EchoServicePortType {
// Inject an instance of WebServiceContext so we can retrieve
// the MessageContext for each invocation of this endpoint.
@Resource
WebServiceContext ctxt;
/**
* Default constructor.
*/
public EchoServiceImpl() {
....
}
public String echoString(String input) {
String result = “Echo result: “ + input;
// Retrieve the MessageContext from the injected WebServiceContext.
MessageContext mc = ctxt.getMessageContext();
// Send some headers back in the response message.
Map<String, Object> responseHeaders = new HashMap<String, Object>();
responseHeaders.put("MyHeader1", "This is a string response value");
responseHeaders.put("MyHeader2", new Integer(33));
responseHeaders.put("MyHeader3”, new Boolean(false));
// Set the response header Map on the MessageContext.
mc.put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);
return result;
}
}