1

camel-restlet コンポーネントを介して REST エンドポイントを公開するキャメル Web アプリケーションを作成していますが、圧縮された xml 応答の文字エンコーディングに問題があります。

Content-Type と charset をそれぞれ と に手動で設定text/xmlUTF-8ました。gzip されたペイロードをクライアントに返すために、Content-Encoding を に設定し、キャメル ルートの最終コンポーネントとしてパターンをgzip使用しました。<marshal><gzip/></marshal>

ルートから返されたペイロードは、無効な gzip ファイルになります。gzip マーシャルと転送の各段階で Notepad++ を使用してペイロードを検査しました - 前に有効な XML を確認し、ステップ後に有効な gzip されたファイルを<marshal/>確認しましたが、クライアントによって受信された応答は、restlet コンポーネントによって異なる方法でエンコードされているようです.

通常[US]<の初期ヘッダーは Notepad++ の有効な gzip ファイルに表示されますが、他の印刷可能な文字の異なる表現と共に、restlet からの応答のように<エンコードされています。これはクライアントとクライアントの�両方に返されます- これにより、restlet コンポーネントのデフォルトの文字エンコーディングを削除/変更する必要があると思われます。charset ヘッダーを削除すると、別の、まだ正しくエンコードされていない応答が得られます。これは、私の疑いを裏付けているようです。curlAccept-Encoding: gzip

restlet がバイナリ データのエンコーディングの変更を引き起こすコンポーネントであると考えるのが正しい場合、どのエンコーディングを設定/削除する必要がありますか?

お時間を割いてお読みいただき、誠にありがとうございました。

中音域

4

1 に答える 1

0

最終的に、サーブレットのセットアップを選択することにしました。最終的には、レストレットを使用して目的を達成する方法がわかりませんでした。

ヘッダーExchange.HTTP_CHARACTER_ENCODINGUTF-8およびExchange.SKIP_GZIP_ENCODINGに設定しfalse、コンポーネントを削除する<marshal><gzip/></marshal>と、サーブレットのデフォルトのトランスポート設定によって gzip 圧縮が自動的に処理されるようになりました。

追加の<servlet>...</servlet>and<servlet-mapping>...</servlet-mapping>を web.xml ファイルに追加しservlet:///exposedEndpointて消費することで、gzip を使用してクライアントでメッセージを消費できるようになり、それ以上の問題は発生しませんでした。

-ミッド

于 2013-06-12T16:27:46.810 に答える