Camel Restlet GZIP Charset编码

时间:2013-06-10 09:45:43

标签: encoding character-encoding gzip apache-camel restlet

我正在创建一个通过camel-restlet组件公开REST端点的camel web应用程序,并且在压缩xml响应的字符编码方面存在一些问题。

我已手动将Content-Type和charset设置为text/xmlUTF-8;将Content-Encoding设置为gzip并使用<marshal><gzip/></marshal>模式作为camel路由中的最终组件,以便将gzip压缩包返回给客户端。

路由返回的有效内容导致gzip压缩文件无效。我已经在gzip编组和传输的每个阶段使用Notepad ++检查了有效负载 - 在之前查看我的有效XML - 以及<marshal/>步骤之后的有效gzip压缩文件,但客户端收到的响应似乎已经编码不同的重要组件。

普通[US]<初始标头显示在Notepad ++中的有效gzip文件中,但<已在restlet的响应中编码为�,并且不同的表示形式其他可打印的人物。这将返回curl和我的客户端Accept-Encoding: gzip - 这使我怀疑我需要删除/更改restlet组件中的默认字符编码。删除字符集标题给了我一个不同的,仍然编码错误的响应,这似乎证实了我的怀疑。

如果我认为restlet是导致二进制数据编码改变的组件是正确的,我应该设置/删除哪种编码,如果没有,我应该寻找什么来通过restlet输出有效的gzipped有效载荷?

非常感谢您花时间阅读,

中频

1 个答案:

答案 0 :(得分:0)

我最终决定选择Servlet设置 - 我最终看不到,我怎么能用restlet来实现我想要的。

将标题Exchange.HTTP_CHARACTER_ENCODING设置为UTF-8,将Exchange.SKIP_GZIP_ENCODING设置为false,并删除我的<marshal><gzip/></marshal>组件,使gzip压缩自动处理servlet的默认传输设置。

将额外的<servlet>...</servlet><servlet-mapping>...</servlet-mapping>添加到我的web.xml文件并使用servlet:///exposedEndpoint消费使我能够使用gzip在我的客户端中使用这些消息而没有其他问题。

-mids