如何处理XML中非法的字符串数据字符?

时间:2018-11-13 12:13:13

标签: xml web-services cxf

考虑用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中其他无效字符)?正确的标准处理方法是什么?

2 个答案:

答案 0 :(得分:1)

理想的情况是,无论控制字符打算做什么,都应具有某种XML机制。

如果这是不可能的,或者由于某种原因您需要发送非字符(几乎总是一个非常糟糕的主意的信号,但是您可能不得不处理别人的错误主意),那么最好将其发送为base-64编码或其他将非文本数据包装在文本中的方式。

答案 1 :(得分:0)

处理在XML中无效的XML内容的标准方法是使用CDATA节或base64编码的值(最好使用base64Binary数据类型)。