【发布时间】:2013-12-04 11:09:55
【问题描述】:
我将 JAX-WS 与 JAX-WS 参考实现一起使用。我正在创建一个 Web 服务,它可以存储 XML,然后可以返回以前存储的 XML。
@WebMethod(operationName="store")
public void store(@WebParam(name="XML") String XML)
{
...
}
@WebMethod(operationName="retrieve")
public String retrieve()
{
String s = XML;
return s;
}
我的界面对 XML 使用字符串类型。当我发送 XML 数据时,我将整个字符串包装到一个 CDATA 标记中(因为我需要在肥皂消息中发送像 这样的字符)。然而,当 Web 服务稍后返回该 XML 数据时,奇怪的事情发生了:
如果字符串足够长,WS 会将所有内容包装到 CDATA 中,这就是我想要的方式。
但是,如果字符串真的很短(例如小型 XML 实例),则单个字符会被转义(例如 & 这样的字符,因为我存储了转义文本,这将被杀死并变成 &
如何强制我的 Web 服务始终在 CDATA 中返回字符串,而不自行转义任何内容?在返回值之前简单地在字符串之前和之后附加 <![CDATA[ 和 ]]> 并没有帮助,因为 CDATA 标记本身会被转义。
顺便说一句:我认为我存储和检索 XML 的事实并不重要。如果我存储包含“”和“&”等字符的常用字符串(这基本上就是我所做的),也会出现同样的问题。如果我通过 CDATA 存储它们但不通过 CDATA 将它们取回,但每个特殊字符都独立转义,我必须自己重建整个字符串。返回字符串时如何强制使用 CDATA?
【问题讨论】:
-
您是否考虑过只嵌套 XML,而不是将其嵌入为
String?它应该让你的生活更轻松。 -
接收器中的 XML 解析器只会做正确的事情,无论字符串是包含在 CDATA 中还是单个字符被转义。您将得到所有转义已解决的原始字符串。
标签: java string web-services cdata