サーバー証明書を読み取り、サーバーへの SSLSocket 接続を行うコードがあります。以下は、高レベルのコードです。
// Create logon request XML in SOAP
SoapObject logonRq = new SoapObject(Constants.NAMESPACE, "LogonRq");
signonRQ.addProperty("UserName", username);
signonRQ.addProperty("Password", passwd);
try {
HttpsTransportSE transport = new HttpsTransportSE(Constants.Host, Constants.Port, "", 500000);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(org.ksoap2.SoapEnvelope.VER10);
envelope.dotNet = true;
envelope.setOutputSoapObject(logonRq);
envelope.setAddAdornments(false);
envelope.implicitTypes = true;
transport.debug = true;
HttpsServiceConnectionSE sc = (HttpsServiceConnectionSE) transport.getServiceConnection();
sc.setSSLSocketFactory(GetsslContext.getSSLSocketFactory());
transport.call(Constants.SOAP_ACTION, envelope);
SoapObject response = (SoapObject) envelope.bodyIn;
} catch (Exception e) {
e.printStackTrace();
}
今私の要件は、サーバーの応答を受信し、別のクライアント要求を送信することです。そのために、次のことをもう一度実行する必要がありますか?
HttpsTransportSE transport = new HttpsTransportSE(Constants.Host, Constants.Port, "", 500000);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(org.ksoap2.SoapEnvelope.VER10);
envelope.dotNet = true;
envelope.setOutputSoapObject(logonRq);
envelope.setAddAdornments(false);
envelope.implicitTypes = true;
transport.debug = true;
HttpsServiceConnectionSE sc = (HttpsServiceConnectionSE) transport.getServiceConnection();
sc.setSSLSocketFactory(GetsslContext.getSSLSocketFactory());
transport.call(Constants.SOAP_ACTION, envelope);
または、単に以下のステートメントを呼び出すことができますか?
transport.call(Constants.SOAP_ACTION, envelope);
基本的に、コードを効率的にして、不要なソケット/HTTPS 呼び出しを行わないようにするにはどうすればよいでしょうか?