2011-08-19 81 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}' –