将SOAP XML响应写入文件

时间:2017-10-09 14:14:42

标签: java xml web-services soap

我正在尝试访问SOAP服务以从URL获取数据。我已成功配置SOAP服务。 我正在运行以下方法来获取SOAP服务的响应

soapResponse = soapConnection.call(SoapMsg, endPoint);
soapResponse.writeTo(fileName); 

但是在获得回复时我得到OutOfMemory Exception

java.lang.OutOfMemoryError: Java heap space
    at java.util.Arrays.copyOf(Arrays.java:3236) ~[na:1.8.0_131]
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:118) ~[na:1.8.0_131]
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93) ~[na:1.8.0_131]
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:153) ~[na:1.8.0_131]
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.readFully(HttpSOAPConnection.java:553) ~[na:1.8.0_131]
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(HttpSOAPConnection.java:318) ~[na:1.8.0_131]
    at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(HttpSOAPConnection.java:145) ~[na:1.8.0_131]

因此,我希望通过在检索整个响应之前将响应分解为较小的块来写入文件。知道如何以这种方式配置它吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可能需要增加堆内存 Increase heap size in Java

或尝试流式传输响应。

connection.call(SoapMsg,endPoint).writeTo(new FileOutputStream(new File(fileName)));

不确定这个是否会起作用,因为我通常使用rest API。

也许您可以尝试通过更新SoapMsg来减少返回的数据量。也许分页是一种选择。