如何在Android中将xml发送到soap

如何在Android中将xml发送到soap,android,xml,soap,ksoap,Android,Xml,Soap,Ksoap,我尝试从Android访问soap web服务。此soap服务需要登录方法。我需要发送密码和用户名检索数据。我正在写这段代码,但它不起作用 import org.ksoap2.SoapEnvelope; import org.ksoap2.serialization.SoapObject; import org.ksoap2.serialization.SoapSerializationEnvelope; import org.ksoap2.transport.AndroidHttpTransp

我尝试从Android访问soap web服务。此soap服务需要登录方法。我需要发送密码和用户名检索数据。我正在写这段代码,但它不起作用

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>

我正在解决使用httpclient的问题。我不会在android上使用ksoap2。我将在AsyncTask中使用androidHTTPclient。

错误消息是什么?如果您希望有人帮助您,您需要提供更多详细信息。好的,很可能您在这一行收到来自Web服务的一些错误消息:SoapObject SoapObject=(SoapObject)envelope.bodyIn;最有可能的是,您发送的消息格式不正确,并且webservice返回错误,不能将其转换为SOAPOBJECT。我认为我犯了错误。我用元素创建了错误的xml。我怎么把它建对?我只是给了一个提示。检查此链接的ex。还可以设置androidHttpTransport.debug=true;看看androidHttpTransport.requestDump和responseDump,看看在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>