2013-08-02 14 views
10

Ho un oggetto HttpTransportSE dalla libreria KSOAP2. Desidero scaricare il file di risposta che potrebbe contenere il mote quindi semplice 9697 carattere. al momento lo sto facendo facendo il trasporto.Come aumentare la dimensione transport.dump da 256 byte a 512 o più byte in KSOAP2?

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

Ma mi dà la metà di risposta con ... finalmente.

Nella struttura di codifica interna ho trovato che utilizza 256 byte per la creazione e la distruzione è responseDump come mostrato di seguito:

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

Si pensa che il suo unico

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

Quindi, c'è qualche opzione per aumentare la dimensione di responseDump?

+0

risposta è: se (transport.debug) { byte [] è = transport.responseDump.getBytes(); String path = "/ mnt/sdcard/appData /"; File file = nuovo file (percorso + "responseDump.xml"); if (! File.exists()) { file.createNewFile(); } BufferedOutputStream bos = new BufferedOutputStream (nuovo FileOutputStream (file)); bos.write (is); bos.flush(); bos.close(); } Grazie esentsov. –

risposta

1

Non c'è alcuna limitazione in ksoap, ma è in logcat. Logcat non stampa stringhe lunghe, quindi scrivi in ​​un file o scrivi pezzo per pezzo nel registro.

+0

Se si vede questo codice interno di ksoap2 solo prendendo solo 256 byte. quindi, anche se sto cercando di scrivere byte per byte, il suo responseDump non è completo. Comunque, tu pensi che sia possibile una risposta gentile con una soluzione. E ancora grazie !. –

+0

Legge un flusso di input in un ciclo pezzo per pezzo con dimensione del buffer 256 byte, non solo i primi 256 byte. – esentsov

+0

[controllare questo] (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(); 
} 
Problemi correlati