La prise en charge de l'encodage en UTF-16 (Universal Transformation
Format) est requise par le Profil de base WS-I. WebSphere Application Server est conforme
au profil WS-I Basic Profile 1.1. UTF-16 est
un schéma d'encodage Unicode qui utilise des valeurs sur 16 bits pour
stocker des caractères UCS (Universal Character Set). UTF-8
est le codage couramment utilisé sur Internet et UTF-16 est
généralement utilisé pour les applications Java™ et Windows. Vous pouvez modifier le codage dans un message SOAP de
UTF-8 à UTF-16.
Avant de commencer
Pour plus de détails sur la configuration requise pour le Profil de
base WS-I, ainsi que sur UTF-16, consultez les informations sur le profil de base WS-I.
Pourquoi et quand exécuter cette tâche
Le support pour le codage UTF-16 est requis par le profil de base WS-I. Le serveur d'applications ne prend en charge que le codage UTF-8 et UTF-16 des messages SOAP.
Vous pouvez modifier l'encodage de caractères de l'une des façons suivantes :
Procédure
- Utilisez une propriété sur le raccord définissable par l'utilisateur.
Cette option s'applique uniquement au client.
Pour un client, l'encodage est spécifié dans la requête SOAP. Le moteur SOAP sérialise la demande et l'envoie au moteur du service web. Le moteur du service web reçoit la demande, puis désérialise
le message en objet Java, qui vous est renvoyé dans une réponse.
Lorsque le moteur du service web sur le serveur reçoit la demande
désérialisée, un message brut sous la forme d'un flux d'entrée est transmis à
l'analyseur, qui peut interpréter le marqueur BOM (Byte Order Mark). Le marqueur BOM est obligatoire pour l'encodage UTF-16 et facultatif pour
l'encodage UTF-8. Le message est désérialisé en objet Java et un appel de service est
réalisé.
Pour un appel bidirectionnel, le moteur doit désérialiser le message à l'aide d'un
encodage spécifique, puis renvoyer le message à l'émetteur.
L'exemple suivant illustre comment utiliser une propriété sur le raccord
pour modifier le jeu de caractères.javax.xml.rpc.Stub stub=service.getPort("MyPortType");
((javax.xml.rpc.Stub)stub).setProperty(com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING,"UTF-16");
stub.invokeMethod();
Dans cet exemple de code, com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";
- Utilisez un gestionnaire pour chnagerle jeu de caractères via SAAJ (SOAP with Attachments
API for Java).
Si vous utilisez un gestionnaire, le message
SOAP est transformé en un format SAAJ à partir d'autres formes possibles, comme un
flux d'entrée.
Ainsi, si vous utilisez une méthode handleRequest côté client et une
méthode handleResponse côté serveur, le moteur de services Web transforme un format
SAAJ en un flux avec l'encodage de caractères approprié.
Cette transformation ou modification est appelée transformation bidirectionnelle.
L'exemple suivant indique comment utiliser un gestionnaire pour spécifier l'encodage de
caractères via SAAJ :handleResponse(MessageContext mc) {
SOAPMessageContext smc = (SOAPMessageContext) context;
javax.xml.soap.SOAPMessage msg = smc.getMessage();
msg.setProperty (javax.xml.soap.SOAPMessage.CHARACTER_SET_ENCODING, "UTF-16");
}
}
Résultats
Vous avez modifié l'encodage des caractères UTF-8 en UTF-16 dans le
message SOAP d'un service Web.