Für WS-I Basic Profile 1.0 ist die Unterstützung der Codierung UTF-16 (Universal Transformation Format) erforderlich. WebSphere
Application Server
ist konform mit dem WS-I Basic Profile 1.1. UTF-16 ist eine Art Unicode-Codierungsschema, das Zeichen des Universalzeichensatzes (UCS, Universal Character Set)
in 16-Bit-Werten speichert.
Im Internet ist die Codierung UTF-8 am weitesten verbreitet. Die Codierung UTF-16
wird in der Regel für Java- und Windows-Produktanwendungen verwendet. Sie können die Codierung in einer SOAP-Nachricht
von UTF-8 in UTF-16 ändern.
Vorbereitende Schritte
Wenn Sie mehr über die Anforderungen von Web Services Interoperability
Basic Profile (WS-I) und UTF-16 erfahren möchten, lesen Sie die Informationen zu Web Services Interoperability Basic Profile.
Informationen zu diesem Vorgang
Die Unterstützung für die UTF-16-Codierung wird vom WS-I Basic Profile vorausgesetzt.
Der Anwendungsserver unterstützt nur die UTF-8- und UTF-16-Codierung von SOAP-Nachrichten.
Es gibt zwei Möglichkeiten, die Zeichencodierung zu ändern:
Vorgehensweise
- Verwenden Sie eine Stub-Eigenschaft, die von Benutzern gesetzt wird.
Diese Möglichkeit
gilt nur für den Client.
Bei einem Client ist die Codierung in der SOAP-Anforderung
angegeben. Die SOAP-Engine serialisiert die Anforderung und sendet sie
an die Web-Service-Engine. Die Web-Service-Engine empfängt die Anforderung und entserialisiert die Nachricht
in Java-Objekte, die dann an Sie zurückgegeben werden.
Wenn die Web-Service-Engine auf dem Server
die serialisierte Anforderung empfängt, wird an den Parser, der BOM (Byte Order Mark) versteht, eine nicht
aufbereitete Nachricht in Form eines Eingabedatenstroms übergeben. BOM ist für die Codierung UTF-16 obligatorisch und für
UTF-8 optional. Die Nachricht wird in ein Java-Objekt entserialisiert und ein Service wird aufgerufen. Bei einem
bidirektionalen Aufruf muss die Engine die Nachricht mit einer speziellen Codierung serialisieren und an den Caller
zurücksenden.
Das folgende Beispiel demonstriert die Änderung des Zeichensatzes mit einer Stub-Eigenschaft: javax.xml.rpc.Stub stub=service.getPort("MeinPortTyp");
((javax.xml.rpc.Stub)stub).setProperty(com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING,"UTF-16");
stub.invokeMethod();
In diesem Codebeispiel gilt Folgendes:
com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";.
- Verwenden Sie einen Handler, um den Zeichensatz mit SAAJ (SOAP with Attachments
API for Java) zu ändern.
Wenn Sie einen Handler verwenden, wird die SOAP-Nachricht aus anderen möglichen Formaten, z. B. einem Eingabedatenstrom,
in ein SAAJ-Format umgesetzt. Bei Fällen mit einer handleRequest-Methode auf der Clientseite und einer handleResponse-Methode
auf der Serverseite setzt die Web-Service-Engine das SAAJ-Format wieder in den Datenstrom mit der entsprechenden Zeichencodierung
um. Diese Umsetzung oder Änderung wird als
wechselseitige Konvertierung bezeichnet.
Das folgende Beispiel demonstriert die Verwendung eines Handlers zur
Angabe der Zeichencodierung
mit 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");
}
}
Ergebnisse
Sie haben die Zeichencodierung der Web-Service-SOAP-Nachricht von UTF-8 in UTF-16 geändert.