Как отправить xml на мыло в Android

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

person icmeyecektim    schedule 27.11.2011    source источник
comment
и какое сообщение об ошибке? Вам нужно предоставить более подробную информацию, если вы хотите, чтобы кто-то помог вам.   -  person mihail    schedule 27.11.2011
comment
Хорошо, вероятно, вы получаете сообщение об ошибке от веб-службы в этой строке: SoapObject soapObject=(SoapObject) конверт.телоIn; Скорее всего, сообщение, которое вы отправляете, имеет неправильный формат и возвращает ошибку веб-службы, которая не может быть приведена как SoapObject.   -  person mihail    schedule 27.11.2011
comment
Я думаю, что ошибаюсь. Я создаю неправильный xml с элементами. Как правильно построить?   -  person icmeyecektim    schedule 28.11.2011
comment
Я просто намекнул. Проверьте это stackoverflow.com/questions/5980108/ ссылка для напр. Также вы можете установить androidHttpTransport.debug = true; и посмотрите на androidHttpTransport.requestDump и responseDump, чтобы увидеть, что происходит.   -  person mihail    schedule 29.11.2011
comment
Мне нужно разработать сложный тип в android. ‹xs:element name=login› ‹xs:complexType› ‹xs:sequence› ‹xs:element minOccurs=0 name=loginMessage nillable=true type=dgp:LoginMessage/› ‹/xs:sequence› ‹/xs:complexType› ‹/xs:element› ‹xs:complexType name=LoginMessage› ‹xs:sequence› ‹xs:element minOccurs=0 name=Пароль nillable=true type=dgp:StringValue/› ‹xs:element minOccurs=0 name=UserName nillable =true type=dgp:StringValue/› ‹/xs:sequence› ‹/xs:complexType›   -  person icmeyecektim    schedule 30.11.2011


Ответы (1)


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

person icmeyecektim    schedule 02.12.2011