@FormParam截断嵌入式内容Apache Wink

时间:2012-06-18 23:00:02

标签: escaping apache-wink form-parameter

我承认我们通过使用url编码表单在单个变量中发送XML文档(换行符转换为空格,内容转义)来做一些愚蠢的事情,但这是为了容纳只能发送表单数据的客户端。

当转义的XML内容中的某个字符串包含撇号

'

请求体的解析停止,并且不返回变量的其余部分。当然,这会产生问题,因为我们检索的XML文档不完整。

当接收者使用Apache Wink JAX-RS库时,在表单参数中传递撇号的正确方法是什么?

这样的一行:

        <decisionspace  title="Traffic Study" details="Discuss the Rivertowns Square projects impact on traffic" />

工作正常,但是像这样的一行:

        <decisionspace  title="Traffic Study" details="Discuss the Rivertowns Square project&apos;s impact on traffic" />

在“Square project”之后被截断

转义的字符是:

"&" becomes "&amp;"
"\"" (double quote) becomes "&quot;"
"'" (single quote) becomes "&apos;"
"<" becomes "&lt;"
">" becomes "&gt;"
bytes < 0x20 or > 0x7f" become "&#nnn;"

2 个答案:

答案 0 :(得分:1)

在进行了一些挖掘之后,似乎表单参数存储在MultivaluedMap(formParameters)中,并且&符号被解释为值分隔符(如在查询字符串中),因此调用formParameters.get(getName( ))仅返回到该位置(显示formParameter值显示在toString()中用逗号分隔的多个值)。我怀疑当请求体被解释为填充formParameter映射时,它将该值解析为查询字符串并将每个&符号的内容分开。

我确定使用不同的转义机制,因此&符是%26或者其他什么,所以它将整行作为单个字符串,我将全部设置。

我猜这一切都取决于任何给定上下文中解析器的视角,而对于形式参数,它正在考虑查询字符串格式化(当然)。

答案 1 :(得分:0)

使用&分隔表单参数。您应该以与为URL而不是XML / HTML相同的方式转义内容。