处理包含无效XML的REST服务响应

时间:2015-03-27 10:19:38

标签: java xml rest apache-httpclient-4.x

我正在从REST服务中检索用户输入的数据。数据以XML格式返回,因此如果用户使用了<字符,则我的XML解析将失败。

我正在使用Apache HttpClient,因此我将数据作为InputStream获取,我不认为我可以对数据做任何事情,直到我将其解析为XML?我原以为服务会对这些进行编码,并且至少会返回有效的XML。

我通过将流写入文件而不是尝试解析它来发现这一点,这是违规点上标记的要点:

<val>blah blah <100% blah blah</val>

所以我不确定如何处理这个问题。

这是我的代码:

@Override
public DataSet handleResponse(final HttpResponse response) throws ClientProtocolException,
        IOException {
    final int status = response.getStatusLine().getStatusCode();
    if (status == 200) {
        final HttpEntity entity = response.getEntity();
        final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            final DocumentBuilder builder = factory.newDocumentBuilder();
            final Document doc = builder.parse(entity.getContent()); // exception
            // ...

例外:

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 2052; The content of elements must consist of well-formed character data or markup.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)

1 个答案:

答案 0 :(得分:1)

问题出在REST Web服务中。如果有任何String输入,你需要在放入websevice之前用CDATA覆盖你的数据,我的意思是准备你的getTypedValue()方法来做到这一点。如果Web服务不在你的手中,那就是一个问题。要求开发人员单独使用它。

如果需要,可以创建一个http过滤器,读取REST XML并使用CDATA进行更改并发送回Webservice客户端。但你不应该这样做。 :)