考虑用Java实现的此Web服务:
@WebMethod(operationName = "test1")
@WebResult(name = "test1", targetNamespace = "http://test.example.org/")
public String test1()
{
return "foo\u0000bar"; // "foo" + NUL + "bar"
}
使用apache CXF(版本2.5.10和2.7.18),将返回(省略SOAP信封):
<ns2:test1>foo[NULL byte here]bar</ns2:test1>
这是无效的XML。
其他Web服务库是否以不同方式处理NULL(以及XML中其他无效字符)?正确的标准处理方法是什么?
答案 0 :(得分:1)
理想的情况是,无论控制字符打算做什么,都应具有某种XML机制。
如果这是不可能的,或者由于某种原因您需要发送非字符(几乎总是一个非常糟糕的主意的信号,但是您可能不得不处理别人的错误主意),那么最好将其发送为base-64编码或其他将非文本数据包装在文本中的方式。
答案 1 :(得分:0)
处理在XML中无效的XML内容的标准方法是使用CDATA节或base64编码的值(最好使用base64Binary数据类型)。