2013-08-02 15 views
10

私はKSOAP2ライブラリからHttpTransportSEオブジェクトを持っています。 moteを含む可能性のある応答ファイルをダンプしたい場合は、9697文字をシンプルにしてください。 現在、私は輸送を行っています。KSOAP2でtransport.dumpのサイズを256バイトから512バイト以上に増やす方法はありますか?

transport.debug = true; 
System.out.println("Response ----------"+transport.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ことが判明=されています

は、その内部の符号化構造では、私は、以下に示すように、それが作成し、それがresponseDumpだ破壊するために256バイトを使用していることがわかりました.read(buf、0、256);

したがって、responseDumpサイズを増やすオプションはありますか?

+0

答えは:IF(transport.debug){ バイト[] = transport.responseDump.getBytesです()。 文字列パス= "/ mnt/sdcard/appData /"; ファイルファイル=新しいファイル(パス+ "responseDump.xml"); if(!file.exists()){ file.createNewFile(); } BufferedOutputStream bos =新しいBufferedOutputStream(新しいFileOutputStream(file)); bos.write(is);bos.flush(); bos.close(); }ありがとうございます。 –

答えて

1

ksoapには制限はありませんが、logcatにあります。 Logcatは長い文字列を出力しないので、ファイルに書き込んだり、ログにピース単位で書き込んだりします。

+0

ksoap2のこの内部コードが表示されている場合は、256バイトしか使用できません。だから私はバイトごとにその完全なresponseDumpを記述しようとしています。それでも、あなたは解決策を考えて、それができるだけ親切であると思います。もう一度ありがとう! –

+0

最初の256バイトだけでなく、256バイトのバッファサイズでサイクル単位で入力ストリームを読み取ります。 – esentsov

+0

[これをチェック](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(); 
} 
関連する問題