2013-08-02 12 views
10

Mam obiekt HttpTransportSE z biblioteki KSOAP2. Chcę zrzucić plik odpowiedzi, który może zawierać mote to prosty 9697 postaci. obecnie robię to wykonując transport.Jak zwiększyć rozmiar transport.dump z 256 bajtów do 512 lub więcej bajtów w KSOAP2?

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

Ale to daje mi pół odpowiedź z ... w końcu.

w wewnętrznej strukturze kodowania i stwierdził, że jest on za pomocą 256 bajtów do tworzenia i usuwania jest responseDump jak pokazano poniżej:

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; 
    } 
} 

można stwierdzić, że jej tylko

int Rd = oznacza .read (buf, 0, 256);

Czy są więc jakieś opcje zwiększenia rozmiaru odpowiedzi?

+0

odpowiedź: jeżeli (transport.debug) { bajt [] oznacza = transport.responseDump.getBytes(); Ścieżka ciągu = "/ mnt/sdcard/appData /"; Plik file = new Plik (ścieżka + "responseDump.xml"); if (! File.exists()) { file.createNewFile(); } BufferedOutputStream bos = new BufferedOutputStream (new FileOutputStream (file)); bos.write (jest); bos.flush(); bos.close(); } Dzięki esentsov. –

Odpowiedz

1

Nie ma ograniczenia w ksoap, ale jest w logcat. Logcat nie drukuje długich łańcuchów, więc pisz w pliku lub pisz po kawałku w dzienniku.

+0

Jeśli widzisz ten wewnętrzny kod ksoap2, przyjmuje on tylko 256 bajtów. więc nawet jeśli próbuję napisać bajt po bajcie, to nie jest on kompletny responseDump. Wciąż jednak myślisz o jego możliwej, miłej reakcji z rozwiązaniem. I znowu dzięki !. –

+0

Odczytuje strumień wejściowy w cyklu, kawałek po kawałku, o rozmiarze bufora 256 bajtów, nie tylko pierwszych 256 bajtów. – esentsov

+0

[sprawdź to] (http://stackoverflow.com/questions/8888654/android-set-max-length-of-logcat-messages) – esentsov

0
if (transport.debug) 
{ 
byte[] is = transport.responseDump.getBytes(); 
String path="/mnt/sdcard/appData/"; 
File file = new File(path+"responseDump.xml"); 
if (!file.exists()) 
{ 
file.createNewFile(); 
} 
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bos.write(is); bos.flush(); bos.close(); 
} 
Powiązane problemy