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 を拡張して独自の 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 を使用して、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() という新しいメソッドを作成する可能性があります。しかし、それはあなた次第です。あなたはこれでうまくいくかもしれませんが、その場合は立派なドキュメントを作成して、これがどのように行われたかを人々に知ってもらう必要があります.

于 2011-08-24T08:20:00.260 に答える
0

面白い。フレームワークにデバッグして、何が起こっているかを確認することをお勧めします。修正を作成できる場合は、それをアップストリームにプルして、新しいリリースをカットできます。

于 2011-08-19T15:59:20.847 に答える