Как отправить xml на мыло в Android - PullRequest
0 голосов
/ 27 ноября 2011

Я пытаюсь получить доступ к мыльному веб-сервису из 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)

1 Ответ

0 голосов
/ 02 декабря 2011

Я решаю проблему с использованием httpclient. Я не буду использовать ksoap2 для Android. Я буду использовать AndroidHTTPclient с AsyncTask.

...