当前位置: 首页 > 面试题库 >

SOAP-非常大的XML响应-OutOfMemoryError

邵骁
2023-03-14
问题内容

首先,这个问题看起来像是 SOAP响应非常大-Android-内存不足错误 主题。
由于我的英语能力很弱,并且这个问题很相似,为了便于理解,我复制了一些陈述段落。

我有一个需要通过SOAP调用将大量数据下载到Web服务的应用程序。然后将响应发送到显示XML文件的函数。

数据大小超过11MB,并且每次都有 java.lang.OutOfMemoryError

修改Web服务以提供较少的数据量不是一种选择。

我使用“ Http请求”来获取数据。我知道:我的要求很好,soapUi和wireshark返回预期的响应。

但是我的AVD无法通过这条线

HttpResponse httpResponse = httpClient.execute(httpPost);

经过几分钟的工作(在该wireshark恢复了一些预期的查询期间),将发生此错误

 Out of memory on a 16705124-byte allocation.

我试图将SD卡的大小升级到20GB,但是仍然出现错误。

解析httpResponse可能是下一步,是否可以通过示例将HttpResponse分成几部分来解析HttpResponse?

你有好主意吗 ?

谢谢,桑德雷


问题答案:

感谢Graeme,在字节流中打开连接是可行的。如果对某人有帮助,这是我的源代码

        //Make a temporary file to save data
        File responseFile = File.createTempFile("SOAP", "xml", context.getFilesDir());      
        int nbCharRead = 0; int i=0; int totalRead = 0;

        //Send query
        OutputStream outputS = url_Connection.getOutputStream();
        Writer w_out = new OutputStreamWriter(outputS);
        w_out.write(webServiceXml);
        w_out.flush();
        w_out.close();


        //Buffers
        BufferedReader bufReader = new BufferedReader(new InputStreamReader(url_Connection.getInputStream()));
        BufferedWriter bufWriter = new BufferedWriter(new FileWriter(responseFile));
        char[] buffer = new char[10000];



        while((nbCharRead = bufReader.read(buffer, 0, 10000)) != -1)
        {
            totalRead += nbCharRead;
            Log.d("Test InputStream", "i: " + i++ +" - " + nbCharRead + " -> " + totalRead);
            bufWriter.write(buffer, 0, nbCharRead );
        }

        if(bufWriter != null)
        {
            bufWriter.flush();
            bufWriter.close();
        }


        Log.w(MsgLog, "--- Stream Got--- ; Total : " + totalRead);


 类似资料:
  • 问题内容: 我有一个应用程序,该应用程序在首次运行时需要通过对Web服务的SOAP调用下载大量数据。然后将响应发送到一个函数,该函数转换XML并将数据存储在db文件中。 数据大小超过16MB,并且每次都有java.lang.OutOfMemoryError。 修改Web服务以提供较小量的数据不是一种选择。 有没有办法可以下载大数据?也许像InputStream一样? 这是我的代码 有人可以建议在这

  • 我有一个肥皂信封 肥皂xsd只是的本地版本http://schemas.xmlsoap.org/soap/envelope/保存到soap。xsd 当我尝试验证这一点时,它表示根据targetAction,架构目标不正确 所有试验和错误都指向xmlns: xsi标记给出错误 我想知道这是否与SOAP 1.0和1.1有关 (我已经能够用完全相同的方法验证soap中的xml)我很确定这可以在一个元素中

  • 我在将XML SOAP返回转换为相应的POJO类时遇到问题。XML返回如下所示: 我尝试使用Jackson XMLMAPER,但是在反序列化过程中,我不能把它作为根元素考虑返回节点。它将“信封”节点视为根节点。 我需要只提取返回节点并转换到我的pojo类。 另一个问题是“项目”节点应该是集合的一部分,但是没有对这些元素进行分组的父节点。 有没有人知道一个解析器可以对这种类型的xml进行反序列化?

  • 问题内容: 我正在使用Java远程方法调用(RMI)测试Web应用程序。当我通过加密狗,宽带连接到Internet时;RMI需要很长时间才能响应请求。完成方法调用大约需要10秒钟。我还可以看到,一旦进行方法调用,互联网连接中的数据传输速率就会提高。因此,显然,它似乎正在通过外部网络在两个内部进程之间建立RMI连接。 与互联网断开连接后,它的响应变化很快,例如几毫秒。我的/ etc / hosts文

  • 问题内容: 我是使用SOAP API的新手 我有一个来自API的肥皂响应 我正在尝试将其转换为对象。 通过在线阅读文章,我试图使用JAXB来做到这一点,但是我的对象是空的。 这是读取响应的代码。我将响应写到xml文件中以进行测试: 本类: 提前致谢! 问题答案: 您可以使用此代码检索POJO,还可以将@XmlRootElement作为标头添加到POJO。 (我没有测试下面的代码) 编辑: 我为您找

  • 使用https://www.freeformatter.com/xml-validator-xsd.html 如果我将soapenf完全从这里的响应和模式的混合中去掉,它工作得很好,但我希望两者都能做到。 (仅供参考,我想指出这个wsdl和xsd没有在endpoint上公开,CISCO提供了wsdl和xsd文件的zip文件)然后您可以根据wsdl/xsd向服务器发送请求,它会工作。但是wsdl和x