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 へ変更する方法を学習します。
このタスクについて
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 に
変更しました。