首页 > 解决方案 > XML 部分响应与 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,所以我被这个难住了,通过搜索找不到其他类似的情况。

感谢您提前提出任何建议

标签: xmlprimefaceswildfly-17

解决方案


经过进一步调查,发现这是 a 的(未确定的)结果@WebFilter

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

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

servletResponse.setContentLength( filteredContent.length() );

我没有编写有问题的类,并且怀疑它可能是“模板代码”,但是重新设置属性似乎导致的问题远远多于它解决的问题。删除它解决了这个问题。看来 servlet 能够自行处理此属性(至少等待更多测试)。


推荐阅读