我想发送一个空的信封,像这样:

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


我似乎不知道该怎么做,有人可以帮忙吗?

最佳答案

我通过创建自己的SoapSerializationEnvelope来扩展原始扩展并用以下方法覆盖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()的新方法。但这取决于你。
您可以接受,但是您应该做一个受人尊敬的
文档,以便人们知道这是如何完成的。

关于android - Android ksoap2发送带有空 body 的信封?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7119410/

10-10 09:31