1

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

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

我似乎无法弄清楚如何做到这一点,有人可以帮忙吗?

4

2 回答 2

1

我已经通过创建自己的 SoapSerializationEnvelope 来解决这个问题,它扩展了原来的一个并用这个覆盖了 writeBody 方法: public class MySoapEnvelope extends SoapSerializationEnvelope

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

要使用它,您只需使用 MySoapSerializationEnvelope 并设置信封.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() 的新方法。但这取决于你。你可以和它相处,但你应该制作一份体面的文档,这样人们就会知道它是如何完成的。

于 2011-08-24T08:20:00.260 回答
0

有趣的。您可能想调试框架以查看发生了什么。如果您可以为其创建修复程序,我很乐意将其拉入上游并删除新版本。

于 2011-08-19T15:59:20.847 回答