Universal Transformation Format (UTF)-16 エンコードのサポートは、
WS-I Basic Profile 1.0 に必要です。WebSphere® Application
Server は、WS-I Basic Profile 1.1 に準拠しています。UTF-16 は 16 ビット値を使用する
ユニコード・エンコード・スキームの一種で、汎用文字セット (UCS) の文字を保管します。UTF-8 は、
インターネットで最もよく使用されるエンコードです。UTF-16 エンコードは通常、Java™ および Windows 製品アプリケーションに使用されます。SOAP メッセージのエンコードを UTF-8 から UTF-16 へ変更することができます。
始める前に
UTF-16 を含めた Web Services-Interoperability Basic Profile (WS-I) の要件の詳細については、Web Services-Interoperability Basic Profile を参照してください。
このタスクについて
WS-I Basic Profile では、UTF-16 エンコードのサポートが必須です。
アプリケーション・サーバーは、SOAP メッセージの UTF-8 エンコードと UTF-16 エンコードのみをサポートしています。
次の 2 つの方法のどちらかを使用して、
文字エンコードを変更することができます。
手順
- ユーザーが設定するスタブ上のプロパティーを使用します。
この方法は、
クライアントにのみ該当します。
クライアントの場合、エンコードは SOAP 要求で指定されます。SOAP エンジンは要求をシリアライズ化し、それを Web サービス・エンジンに送信します。Web サービス・エンジンは要求を受信し、メッセージを Java オブジェクトにデシリアライズし、この Java オブジェクトが応答でユーザーに返されます。
サーバー上の Web サービス・エンジンがシリアライズされた要求を受け取る場合は、入力ストリームの形式の未加工のメッセージが、Byte Order Mark (BOM) を認識するパーサーに渡されます。BOM は UTF-16 エンコードには必須で、UTF-8 で使用することができます。メッセージは Java オブジェクトにデシリアライズされ、
サービス呼び出しが行われます。両方向の呼び出しの場合、エンジンは特定のエンコードを使用してメッセージをシリアライズして、
それを呼び出し元に送信する必要があります。
以下は、スタブ上でプロパティーを使用して文字セットを変更する方法の例です。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();
このコード例では、
com.ibm.wsspi.webservices.Constants.MESSAGE_CHARACTER_SET_ENCODING = "com.ibm.wsspi.webservices.xmlcharset";
- ハンドラーを使用して、SOAP with Attachments API for Java (SAAJ) を介して
文字セットを変更します。
ハンドラーを使用する場合、
SOAP メッセージは、入力ストリームなどの他の可能なフォーマットから SAAJ フォーマットに変換されます。クライアント・サイドの handleRequest メソッドおよびサーバー・サイドの handleResponse メソッドなどの場合、Web サービス・エンジンは、SAAJ フォーマットから、適切な文字エンコードを持つストリームにフォーマットを変換します。この変換は、往復変換と呼ばれます。
以下の例に、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");
}
}
タスクの結果
Web サービス SOAP メッセージで、文字エンコードを UTF-8 から UTF-16 に変更しました。