Meilleures pratiques pour la définition des propriétés des en-têtes de transport
Les propriétés REQUEST_TRANSPORT_PROPERTIES et RESPONSE_TRANSPORT_PROPERTIES peuvent être définies dans un raccord de client JAX-RPC (Java™ API for XML-based RPC), dans une instance Call ou dans une instance BindingProvider de JAX-WS (Java API for XML-Based Web services), pour permettre à un client de services Web d'envoyer ou d'extraire des en-têtes de transport.

Meilleures pratiques pour REQUEST_TRANSPORT_PROPERTIES
- Chaque paire nom=valeur incorporée à la valeur de l'en-tête doit être séparée par un point-virgule (;).
- Un signe égal (=) doit séparer chaque nom de sa valeur.
name1=value1;name2=value2;name3=value3
- L'en-tête de la demande sortante contient une valeur nom.
Dans ce cas, la paire nom=valeur provenant de la mappe est automatiquement ignorée. Ceci empêche un client de remplacer ou de modifier des valeurs nom qui sont déjà définies par le serveur ou le moteur de services Web dans l'en-tête de la demande sortante.
- La valeur d'en-tête de l'utilisateur contient plusieurs valeurs nom.
Si la valeur d'en-tête de l'utilisateur contient plusieurs valeurs nom, la première occurrence de la valeur nom est ajoutée et les autres sont automatiquement ignorées. Par exemple, pour une valeur d'en-tête d'utilisateur contenant nom=valeur1;nom2=valeur2;nom1=valeur3, où l'on trouve deux occurrences de nom1, la première valeur, nom1=valeur1, est utilisée. L'autre valeur, nom1=valeur3, est automatiquement ignorée.
Meilleures pratiques pour RESPONSE_TRANSPORT_PROPERTIES
Seules les clés Map sont utilisées. Les valeurs Map sont ignorées. Les valeurs dans cette mappe reçoivent leur contenu de l'extraction des en-têtes de transport, qui correspondent aux clés Map du message de réponse entrant. Une mappe vide provoque l'extraction à partir du message de réponse entrant de la totalité des en-têtes et des valeurs qui leur sont associées.
En-têtes HTTP faisant l'objet d'un traitement spécifique
Les en-têtes HTTP suivants sont traités de manière spécifique lors de l'envoi et de l'extraction de réponses et de requêtes HTTP.
Les valeurs de ces en-têtes peuvent être définies de différentes façons. Par exemple, certaines valeurs d'en-tête sont envoyées en fonction des paramètres définis dans un descripteur de déploiement ou un fichier de liaisons. Ainsi, la valeur définie par REQUEST_TRANSPORT_PROPERTIES remplace les valeurs définies autrement.
En-tête | Envoi de requête | Extraction de réponse |
---|---|---|
Transfer-encoding |
|
Aucun traitement spécial n'est requis. |
Connection |
|
Aucun traitement spécial n'est requis. |
Expect |
|
Aucun traitement spécial n'est requis. |
Host | Ignoré | Aucun traitement spécial n'est requis. |
Content-type | Ignoré | Aucun traitement spécial n'est requis. |
SOAPAction | Ignoré | Aucun traitement spécial n'est requis. |
Content-length | Ignoré | Aucun traitement spécial n'est requis. |
Cookie Ceci une chaîne de type constante : com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE |
La valeur est envoyée sur l'en-tête si sa structure est correcte. Pour plus de détails sur le format de la valeur de l'en-tête et les valeurs de mappe, voir les informations fournies dans cet article. | Aucun traitement spécial n'est requis. |
Cookie2 Voici une chaîne de type constante : com.ibm.websphere.webservices.Constants.HTTP_HEADER_COOKIE2 |
Voir les informations dans l'entrée "Cookie". | Aucun traitement spécial n'est requis. |
Set-cookie Voici une chaîne de type constante : com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE |
Aucun traitement spécial n'est requis. | Si la propriété MAINTAIN_SESSION est définie à true, la valeur entière est enregistrée dans SessionContext.CONTEXT_PROPERTY et est envoyée aux demandes suivantes dans l'en-tête Cookie. Pour plus d'informations, reportez-vous à l'entrée Cookie de ce tableau. |
Set-cookie2 Ceci une constante de type chaîne : com.ibm.websphere.webservices.Constants.HTTP_HEADER_SET_COOKIE2 |
Aucun traitement spécial n'est requis. | Si la propriété MAINTAIN_SESSION est définie à true, la valeur entière est enregistrée dans SessionContext.CONTEXT_PROPERTY et est envoyée aux demandes suivantes dans l'en-tête Cookie. Pour plus d'informations, reportez-vous à l'entrée Cookie de ce tableau. |
Exemple de code client
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 and receive transport headers.
public void invokeService() {
// Set up the Map that will contain the request headers.
Map<String, Object>requestHeaders = new HashMap<String, Object>();
requestHeaders.put(“Cookie”, “ClientAuthenticationToken=FFEEBBCC”);
requestHeaders.put(“MyHeaderFlag”, 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);
// Set up the Map to retrieve transport headers from the response message.
Map<String, Object>responseHeaders = new HashMap<String, Object>();
responseHeaders.put(“Set-Cookie”, null);
responseHeaders.put(“MyHeaderFlag, null);
// Invoke the web services operation.
String result = port.echoString(“Hello, world!”);
// Retrieve the headers from the response.
String cookieValue = responseHeaders.get(“Set-Cookie”);
String headerFlag = responseHeaders.get(“MyHeaderFlag”);
}
}