我正在从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)
答案 0 :(得分:1)
问题出在REST Web服务中。如果有任何String输入,你需要在放入websevice之前用CDATA覆盖你的数据,我的意思是准备你的getTypedValue()方法来做到这一点。如果Web服务不在你的手中,那就是一个问题。要求开发人员单独使用它。
如果需要,可以创建一个http过滤器,读取REST XML并使用CDATA进行更改并发送回Webservice客户端。但你不应该这样做。 :)