android - 如何在 KSOAP2 中将 transport.dump 大小从 256 字节增加到 512 或更多字节?

标签 android xml xml-parsing xmlhttprequest android-ksoap2

我有来自 KSOAP2 库的 HttpTransportSE 对象。 我想转储响应文件,它可能包含微尘然后是简单的 9697 字符。 目前我正在通过运输来做到这一点。

transport.debug = true;
System.out.println("Response ----------"+transport.responseDump);

但它最终给了我 ... 一半的回应。

在它的内部编码结构中,我发现它使用 256 个字节来创建和销毁它的 responseDump,如下所示:

package org.ksoap2.transport;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.Proxy;
import java.net.URL;
import java.util.List;
import org.ksoap2.HeaderProperty;
import org.ksoap2.SoapEnvelope;
import org.xmlpull.v1.XmlPullParserException;

public class HttpTransportSE extends Transport
{
  private ServiceConnection connection;

  public HttpTransportSE(String url)
  {
    super(null, url);
  }

  public HttpTransportSE(Proxy proxy, String url)
  {
    super(proxy, url);
  }

  public HttpTransportSE(String url, int timeout)
  {
    super(url, timeout);
  }

  public HttpTransportSE(Proxy proxy, String url, int timeout) {
    super(proxy, url, timeout);
  }

  public void call(String soapAction, SoapEnvelope envelope)
    throws IOException, XmlPullParserException
  {
    call(soapAction, envelope, null);
  }

  public List call(String soapAction, SoapEnvelope envelope, List headers)
    throws IOException, XmlPullParserException
  {
    if (soapAction == null) {
      soapAction = "\"\"";
    }
    byte[] requestData = createRequestData(envelope);

    this.requestDump = (this.debug ? new String(requestData) : null);
    this.responseDump = null;

    this.connection = getServiceConnection();

    this.connection.setRequestProperty("User-Agent", "kSOAP/2.0");

    if (envelope.version != 120) {
      this.connection.setRequestProperty("SOAPAction", soapAction);
    }
    this.connection.setRequestProperty("Content-Type", "text/xml");
    this.connection.setRequestProperty("Connection", "close");
    this.connection.setRequestProperty("Content-Length", "" + requestData.length);

    if (headers != null) {
      for (int i = 0; i < headers.size(); i++) {
        HeaderProperty hp = (HeaderProperty)headers.get(i);
        this.connection.setRequestProperty(hp.getKey(), hp.getValue()); }  } 
this.connection.setRequestMethod("POST");
    this.connection.connect();

    OutputStream os = this.connection.openOutputStream();

    os.write(requestData, 0, requestData.length);
    os.flush();
    os.close();
    requestData = null;

    List retHeaders = null;
    InputStream is;
    try { this.connection.connect();
      is = this.connection.openInputStream();
      retHeaders = this.connection.getResponseProperties();
    } catch (IOException e) {
      is = this.connection.getErrorStream();

      if (is == null) {
        this.connection.disconnect();
        throw e;
      }
    }

    if (this.debug) {
      ByteArrayOutputStream bos = new ByteArrayOutputStream();
      byte[] buf = new byte[256];
      while (true)
      {
        int rd = is.read(buf, 0, 256);
        if (rd == -1)
          break;
        bos.write(buf, 0, rd);
      }

      bos.flush();
      buf = bos.toByteArray();
      this.responseDump = new String(buf);
      is.close();
      is = new ByteArrayInputStream(buf);
    }

    parseResponse(envelope, is);
    return retHeaders;
  }

  public ServiceConnection getConnection() {
    return (ServiceConnectionSE)this.connection;
  }

  protected ServiceConnection getServiceConnection() throws IOException {
    return new ServiceConnectionSE(this.proxy, this.url, this.timeout);
  }

  public String getHost()
  {
    String retVal = null;
    try
    {
      retVal = new URL(this.url).getHost();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }

    return retVal;
  }

  public int getPort()
  {
    int retVal = -1;
    try
    {
      retVal = new URL(this.url).getPort();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }

    return retVal;
  }

  public String getPath()
  {
    String retVal = null;
    try
    {
      retVal = new URL(this.url).getPath();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }

    return retVal;
  }
}

你发现它只有

int rd = is.read(buf, 0, 256);

那么,是否有增加 responseDump 大小的选项?

最佳答案

在ksoap里没有限制,在logcat里有。 Logcat 不打印长字符串,所以写在文件中或者在日志中一段一段地写。

关于android - 如何在 KSOAP2 中将 transport.dump 大小从 256 字节增加到 512 或更多字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18009300/

相关文章:

android - 将 ImageView 缩放到全屏

c# - xml 解析字符引用 : invalid xmlChar value 0

java - xml 解析 - Java 中的 xpath 说明

java - 根据不同的请求读取具有多个值的XML主体元素

android - 当我将 ListView 放入列中时,我得到 "Another exception was thrown: RenderBox was not laid out"

android - 在android中的 fragment 中设置 ListView 适配器

java - 我想按值从 Firebase 实时数据库中删除值,但我没有它的 key

java - 元素类型 "property"的内容必须匹配

python - 在 Python 中解析 soap/XML 响应

java - 错误 APIRest JBPM 6.2 RemoteRuntimeEngineFactory