处理包含无效 XML 的 REST 服务响应
Handle REST service responses that contain invalid XML
我正在从 REST 服务中检索用户输入的数据。数据在 XML 中 returned,因此如果用户使用了 <
字符,我的 XML 解析将失败。
我正在使用 Apache HttpClient
,所以我将数据作为 InputStream
获取,我认为在将数据解析为 [=30= 之前我无法对数据做任何事情]?我原以为该服务会对这些进行编码,并且总是 return 至少有效 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)
问题出在 REST Web 服务中。如果有任何字符串输入,您需要在放入 web 服务之前用 CDATA 覆盖您的数据,我的意思是准备您的 getTypedValue() 方法来执行此操作。如果 Webservice 不在您手中,那就是个问题。要求开发商独家发售。
如果需要,您可以制作一个 http 过滤器,读取 REST XML 并用 CDATA 更改它并发送回 Web 服务客户端。但是你不应该这样做。 :)
我正在从 REST 服务中检索用户输入的数据。数据在 XML 中 returned,因此如果用户使用了 <
字符,我的 XML 解析将失败。
我正在使用 Apache HttpClient
,所以我将数据作为 InputStream
获取,我认为在将数据解析为 [=30= 之前我无法对数据做任何事情]?我原以为该服务会对这些进行编码,并且总是 return 至少有效 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)
问题出在 REST Web 服务中。如果有任何字符串输入,您需要在放入 web 服务之前用 CDATA 覆盖您的数据,我的意思是准备您的 getTypedValue() 方法来执行此操作。如果 Webservice 不在您手中,那就是个问题。要求开发商独家发售。
如果需要,您可以制作一个 http 过滤器,读取 REST XML 并用 CDATA 更改它并发送回 Web 服务客户端。但是你不应该这样做。 :)