1

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

我已经手动将 Content-Type 和 charset 分别设置为text/xmland UTF-8;将 Content-Encoding 设置为gzip并将该<marshal><gzip/></marshal>模式​​用作骆驼路由中的最终组件,以便将压缩后的有效负载返回给客户端。

从路由返回的有效负载会导致无效的 gzip 文件。我已经在 gzip 编组的每个阶段使用 Notepad++ 检查了有效负载并进行了传输——之前看到了我的有效 XML——在<marshal/>步骤之后看到了有效的 gzip 文件,但是客户端收到的响应似乎已经被 restlet 组件以不同的方式编码.

正常的[US]<初始标头显示在 Notepad++ 中的有效 gzip 文件中,但是它<已被编码为�来自 restlet 的响应,以及其他可打印字符的不同表示。这将返回给curl我的客户和我的客户Accept-Encoding: gzip- 这导致我怀疑我需要删除/更改 restlet 组件中的默认字符编码。删除字符集标头给了我一个不同的、仍然错误编码的响应,这似乎证实了我的怀疑。

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

非常感谢您花时间阅读,

中音

4

1 回答 1

0

我最终决定选择 Servlet 设置 - 我最终看不到如何使用 restlet 来实现我想要的。

将标头设置Exchange.HTTP_CHARACTER_ENCODINGUTF-8Exchange.SKIP_GZIP_ENCODINGfalse删除我的<marshal><gzip/></marshal>组件使 gzip 压缩由 servlet 的默认传输设置自动处理。

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

-mids

于 2013-06-12T16:27:46.810 回答