TIBCO EMS ライブラリ TIBCO.EMS.dll を使用して、xml メッセージを TIBCO EMS サーバーのキューに送信しています。これらのメッセージを受信するアプリケーションでは、XML が UTF-8 でエンコードされている必要があります。UTF-8 xml を生成すること自体は問題ではありませんが、データを UTF-8 形式に保ちながら TextMessage をキューに送信する方法はわかりません。
オブジェクトを UTF-8 XML にシリアル化するには、次のコードを使用します (ここでは簡略化しています)。
XmlSerializer serializer = new XmlSerializer(data.GetType());
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms, System.Text.Encoding.UTF8);
serializer.Serialize(sw, data);
byte[] result = ms.ToArray();
これにより、utf-8 でエンコードされた xml を含むバイト配列が残ります。これを BytesMessage に書き込んで、EMS キューに送信できます。
BytesMessage message = _queueSession.CreateBytesMessage();
message.WriteBytes(result);
_queueSender.Send(message);
_queueSession.Commit();
しかし、その結果、キューに BytesMessage が発生します。TextMessage を取得する唯一の方法は TextMessage クラスを使用することですが、そのクラスのテキスト プロパティは標準の Unicode 文字列であり、その結果 xml で utf-8 エンコーディングが失われます。
UTF-8 でエンコードされたテキスト メッセージを送信する方法を知っている人はいますか?