10

Web 上でかなり相反する情報をいくつか見つけましたが、JMS プロバイダーが異なれば回答も変わる可能性があると思います。

XML を JMS システム (ActiveMQ など) に送信するときに、

  • BytesMessage : XML が正しくシリアル化され、プリアンブルが実際のエンコーディングと一致することを保証できます。さらに、クライアントが生の表現を正しく取得できることを確信できます。

  • TextMessage : キューの実装の多くには、XML を簡単に送信するための API があります。また、メッセージに「エンコード」情報が添付されていることも理解しています。しかし、メッセージを 1 つの形式でエンコード (およびプリアンブルを記述) し、別の形式で受信するリスクがあります。

決定的な答えを持っている人はいますか、または少なくともどちらかを選択する理由はありますか?

4

1 に答える 1

5

あなたの質問に対するjosのコメントに同意します。まず、コンテンツのセマンティクスを最もよく表す種類のメッセージ タイプを選択する必要があります。Javadocを読んでTextMessage、私はそれに行きます:

このメッセージ タイプは、XML コンテンツを含むメッセージを含む、テキストベースのメッセージを転送するために使用できます。

そのため、テキスト メッセージのエンコーディングで問題が発生した場合は、クライアント/サーバー側で何らかの設定ミスが発生している可能性があります。しかし、それが、主にテキスト転送を目的としていない別のメッセージ タイプ ( BytesMessage.

注意: を使用してもBytesMessage、エンコーディングが間違っている可能性があります。想像:

// Send that data through JMS
byte[] data1 = "source text".getBytes("ISO-8859-1");

// Receive the byte stream on the other side. Ooops
String data2 = new String(data1, "UTF-8");
于 2012-06-01T12:54:53.150 に答える