我正在尝试访问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]
因此,我希望通过在检索整个响应之前将响应分解为较小的块来写入文件。知道如何以这种方式配置它吗?
提前致谢。
答案 0 :(得分:1)
您可能需要增加堆内存 Increase heap size in Java
或尝试流式传输响应。
connection.call(SoapMsg,endPoint).writeTo(new FileOutputStream(new File(fileName)));
不确定这个是否会起作用,因为我通常使用rest API。
也许您可以尝试通过更新SoapMsg来减少返回的数据量。也许分页是一种选择。