使用Spring的SOAP服务。逃避特殊字符

时间:2013-07-15 10:00:37

标签: java soap soapui spring-ws

我有一个使用Spring框架开发的SOAP Web服务。每当请求包含一些无效数据时,我需要显示如下所示的错误消息

Error occurred. Invalid data for <Field Name>.

所以我的代码如下所示进行名称验证。如果没有为名称字段传递值,则会将此错误作为响应发送。

Assert.notNull(name, "Error occurred. No value passed for the field <name>. ");

所以我的期望是

Error occurred. No value passed for the field <name>.

但SOAP UI中的响应如下所示。

Error occurred. No value passed for the field &lt;name>.

如何显示正确的&lt; SOAP UI中的符号?我试过CDATA。但不确定接收方如何使用CDATA处理请求。

SOAP UI中的CDATA消息如下所示

Error occurred. No value passed for the field <![CDATA[<]]name>.

1 个答案:

答案 0 :(得分:2)

XML规范声明:

  

&符号(&amp;)和左尖括号(&lt;)不得以其文字形式出现,除非用作标记分隔符,或用于注释,处理指令或CDATA部分。如果在其他地方需要它们,则必须分别使用数字字符引用或字符串“&amp; amp;”和“&amp; lt;”进行转义。右尖括号(&gt;)可以使用字符串“&amp; gt;”来表示,并且为了兼容性,当它出现在字符串“]中时,必须使用”&amp; gt;“或字符引用进行转义。 &gt;“在内容中,当该字符串未标记CDATA部分的结尾时。

因此,您需要在错误字符串中转义左尖括号:

Error occurred. No value passed for the field &lt;name>.

或者将整个错误字符串封装在CDATA部分中:

<![CDATA[Error occurred. No value passed for the field <name>.]]>

有关详细信息,请参阅http://www.w3.org/TR/xml/#syntax