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.

Pratiques recommandées Pratiques recommandées: Grâce aux meilleures pratiques expliquées ci-dessous, vous pourrez permettre à un client de services Web d'envoyer ou d'extraire des en-têtes de transport.bprac

Meilleures pratiques pour REQUEST_TRANSPORT_PROPERTIES

Certains en-têtes de transport comme celui des cookies HTTP et de Cookie2 contiennent plusieurs valeurs. Dans le cas d'en-têtes comportant des valeurs multiples, les valeurs doivent être écrites de la manière suivante :
  • 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.
Voici un exemple correct de valeur d'en-tête :
name1=value1;name2=value2;name3=value3
Les valeurs contenues dans la mappe de l'utilisateur peuvent être interprétées avant d'être ajoutées à la demande sortante si cette dernière contient déjà un identificateur d'en-tête correspondant à l'un de ceux contenus dans la mappe. Dans le cas d'en-têtes comportant des valeurs multiples, les valeurs d'en-tête dans la mappe sont analysées une par une comme des composants nom=valeur individuels. Un point-virgule (;) sépare les composants (exemple : nom1=valeur1;nom2=valeur2. Chaque paire nom=valeur est ajoutée à l'en-tête sortant sauf dans les cas suivants :
  • 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.

Tableau 1. En-têtes des demandes et des réponses HTTP. Cette rubrique détaille les valeurs à indiquer pour les en-têtes HTTP lors de l'envoi et de la réception des requêtes et des réponses HTTP.
En-tête Envoi de requête Extraction de réponse
Transfer-encoding
  • L'en-tête Transfer-encoding est ignoré par HTTP 1.0.
  • Lorsque HTTP 1.1 est utilisé, l'en-tête Transfer-encoding est défini à chunked si la valeur est définie à chunked.
Aucun traitement spécial n'est requis.
Connection
  • L'en-tête Connection est ignoré par HTTP 1.0.
  • Lorsque HTTP 1.1 est utilisé, les valeurs suivantes sont définies :
    • L'en-tête Connection est défini à "close" si la valeur est définie à "close".
    • L'en-tête Connection est défini à "keep-alive" si la valeur est définie à "keep-alive".
    • Toutes les autres valeurs sont ignorées.
Aucun traitement spécial n'est requis.
Expect
  • L'en-tête Expect est ignoré par HTTP 1.0.
  • Lorsque HTTP 1.1 est utilisé, les valeurs suivantes sont définies :
    • L'en-tête Connection est défini à "100-continue" si la valeur est définie à "100-continue".
    • Toutes les autres valeurs sont ignorées.
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

L'exemple suivant explique comment écrire le code d'un client de services Web pour envoyer et extraire les valeurs de l'en-tête de transport :
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”);
    }
}

Icône indiquant le type de rubrique Rubrique de référence



Icône d'horodatage Dernière mise à jour: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rwbs_transportheaderproperty
Nom du fichier : rwbs_transportheaderproperty.html