解析SOAP响应时出现内存不足错误

时间:2013-06-17 08:07:57

标签: soap

我正在获得一个包含大约10000多行数据的大型SOAP响应,并从CDATA中提取相关数据并插入数据库。

代码如下:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setCoalescing(true);
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = new ByteArrayInputStream(resp.getBytes());
Document doc = db.parse(is);
XPathFactory xPathfactory = XPathFactory.newInstance();
XPath xpath = xPathfactory.newXPath();
XPathExpression expr = xpath.compile(fetchResult);
String result = (String) expr.evaluate(doc, XPathConstants.STRING); 

resp包含SOAP响应 fetchResult是

String fetchResult = "//result/text()";

我在最后一行收到OutofMemory错误。我确实尝试将堆大小增加到1.2 GB,但这也没有用。

你们中的任何人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

将文档作为流处理,而不是将整个响应作为Document使用。您目前使用的代码构建了表示内存中文档的结构,然后尝试在其上评估XPath表达式。

更有效的内存方法是使用SAX解析器(参见here)。通过使用SAX解析器,您可以根据需要流式传输文档,在任何时候只在内存中保留一小部分文档。