XML Wildfly/Primefaces 上的货币符号中断了部分响应

XML Partial-Response breaks with Currency Symbol on Wildfly/Primefaces

当请求的响应中包含货币符号(在本例中为“£”)时,我遇到了损坏的 XML。

我做了很多测试,并将其缩小到在 XML 中使用“£”,这会以某种方式导致结束标记不完整,这当然会导致无法解析 XML,例如:

<?xml version='1.0' encoding='UTF-8'?>
<partial-response>
<changes>
<update id="productForm">
<![CDATA[
<form enctype="application/x-www-form-urlencoded">
    <div>
         <span>
             <span id="productForm:price">£10.00</span>
         </span>
    </div>
</form>]]>
</update>
</changes>
</partial-response

这是由于损坏的(不是拼写错误)partial-response 结束标记造成的,正如在开发控制台中确认的那样:

£ 的存在是原因,正如调试和测试所确定的那样。

以下是我可以做出的一些断言:

我看不到任何导致此问题的明显原因 - 我也无法确定它是应用程序服务器问题还是应用程序配置问题。它已经在 *NIX 环境中进行了测试,没有任何迹象表明它在这方面是环境的。

这里有什么明显的遗漏吗?我能看到的所有编码都设置为UTF-8,所以我被这个难住了,通过搜索找不到其他类似的情况。

提前感谢您的任何建议

经过进一步调查,发现这是 @WebFilter.

的(未确定的)结果

Web 过滤器实现拦截了输出字符串中的某些值,尽管实际上没有更改请求的内容,尤其是在调试器中,但这似乎会导致响应进一步出现问题。

网络过滤器中代码的问题区域是:

servletResponse.setContentLength( filteredContent.length() );

我没有写有问题的 class,我怀疑它可能是 'template code',但这种属性的重新设置似乎导致的问题远比它解决的问题多。删除它解决了这个问题。看起来 servlet 能够自行处理此属性(至少等待更多测试)。