Я пытаюсь получить доступ к мыльному веб-сервису из Android. Этот сервис мыла требует метода входа в систему. Мне нужно отправить пароль и имя пользователя для получения данных. Я пишу этот код, но он не работает.
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.AndroidHttpTransport;
import org.kxml2.kdom.Element;
import org.kxml2.kdom.Node;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class SoapTestActivity extends Activity {
final static String NAMESPACE = "http://ws.dgpys.deloitte.com/";
final static String METHOD_NAME = "login";
final static String SOAP_ACTION = "http://ws.dgpys.deloitte.com/login";
final static String URL = "http://dgpysws.teias.gov.tr/dgpys/services/EVDServis?wsdl";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SoapObject reSoapObject = new SoapObject(NAMESPACE, METHOD_NAME);
Element usernameTokenElement = new Element().createElement(NAMESPACE, "loginMessage");
Element passwordElement = new Element().createElement(NAMESPACE, "Password");
passwordElement.setAttribute(NAMESPACE, "v", "*****");
usernameTokenElement.addChild(Node.ELEMENT, passwordElement);
Element usernameElement = new Element().createElement(NAMESPACE, "UserName");
usernameElement.setAttribute(NAMESPACE, "v", "*****");
usernameTokenElement.addChild(Node.ELEMENT, usernameElement);
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.headerOut=new Element[1];
envelope.headerOut[0]=usernameTokenElement;
envelope.setOutputSoapObject(reSoapObject);
AndroidHttpTransport androidHttpTransport=new AndroidHttpTransport(URL);
try {
androidHttpTransport.call(SOAP_ACTION, envelope);
SoapObject soapObject=(SoapObject) envelope.bodyIn;
Log.e(">>>>>>>>>>>>>>>>>>", "Response: "+soapObject);
} catch (IOException e) {
e.printStackTrace();
} catch (XmlPullParserException e) {
e.printStackTrace();
}
}
}
<ns1:login xmlns:ns1='http://ws.dgpys.deloitte.com'>
<loginMessage>
<Password v='*****' />
<UserName v='****' />
</loginMessage>
</ns1:login>
Как мне построить и отправить это выше XML в Android.
Редактировать: сообщения об ошибках
11-27 12:57:09.932: E/AndroidRuntime(8753): FATAL EXCEPTION: main
11-27 12:57:09.932: E/AndroidRuntime(8753): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.soap.test/com.soap.test.SoapTestActivity}: java.lang.ClassCastException: org.ksoap2.SoapFault
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.os.Handler.dispatchMessage(Handler.java:99)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.os.Looper.loop(Looper.java:123)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread.main(ActivityThread.java:4627)
11-27 12:57:09.932: E/AndroidRuntime(8753): at java.lang.reflect.Method.invokeNative(Native Method)
11-27 12:57:09.932: E/AndroidRuntime(8753): at java.lang.reflect.Method.invoke(Method.java:521)
11-27 12:57:09.932: E/AndroidRuntime(8753): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
11-27 12:57:09.932: E/AndroidRuntime(8753): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-27 12:57:09.932: E/AndroidRuntime(8753): at dalvik.system.NativeStart.main(Native Method)
11-27 12:57:09.932: E/AndroidRuntime(8753): Caused by: java.lang.ClassCastException: org.ksoap2.SoapFault
11-27 12:57:09.932: E/AndroidRuntime(8753): at com.soap.test.SoapTestActivity.onCreate(SoapTestActivity.java:54)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-27 12:57:09.932: E/AndroidRuntime(8753): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)