2011-08-19 72 views
1

我想用一個空的身體像這樣送一個信封:Android ksoap2發送信封與空身?

 <v:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:d="http://www.w3.org/2001/XMLSchema" 
    xmlns:c="http://schemas.xmlsoap.org/soap/encoding/" 
    xmlns:v="http://schemas.xmlsoap.org/soap/envelope/"> 
    <v:Header /> 
     <v:Body> 
     </v:Body> 
    </v:Envelope> 

是否可能,如何?我試過這個:

 HttpsTransportSE transport = new HttpsTransportSE(HOST, PORT, ENDPOINT, TIMEOUT); 
    SoapObject request = new SoapObject(null, null); 
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);  
    envelope.setOutputSoapObject(request); 
    transport.call(SOAP_ACTION, envelope); 

我似乎無法弄清楚如何做到這一點,任何人都可以請幫忙嗎?

回答

1

我已經通過創建我自己的SoapSerializationEnvelope擴展原始一個與此overridering的writeBody方法解決了這一問題: 公共類MySoapEnvelope擴展SoapSerializationEnvelope

{ 
    public MySoapEnvelope(int version) { 
     super(version); 
    } 
    @Override 
    public void writeBody(XmlSerializer writer) throws IOException 
    { 
     if (bodyOut!=null){ 
     super.writeBody(writer); 
     } 
    } 
} 

要使用它,你只需要使用MySoapSerializationEnvelope並設置envelope.bodyOut = null;

HttpsTransportSE transport = new HttpsTransportSE(host, port, endpoint, timeout); 
MySoapEnvelope emptySoapEnvelope = new MySoapEnvelope(SoapEnvelope.VER11); 
emptySoapEnvelope.bodyOut = null; 
transport.call(methodname, emptySoapEnvelope); 

我不知道你是否想用這段代碼來削減新版本。我可能會在原始SoapEnvelope中創建一個名爲setEmptyEnvelope()的新方法。但這取決於你。 你可以相處得很好,但是你應該製作一本令人尊敬的文檔,以便人們知道這是如何完成的。

+0

這是否適用於KSOAP 3.2?我試過使用它,但仍然在body標籤內發送空標籤。 Like: \t < />

0

有趣。您可能想要調試到框架中以查看正在發生的事情。如果你可以爲它創建一個修復程序,我很樂意將它拉入上游並削減一個新版本。

+0

我已經通過創建自己的MT延伸SoapSerializationEnvelope原來與此overridering的writeBody方法解決了這一問題: '@覆蓋 \t公共無效writeBody(XmlSerializer的作家)拋出IOException異常 \t { \t \t如果(bodyOut! = null){ \t \t super.writeBody(writer); \t \t} \t \t \t}' –