如何在Android中将xml发送到soap
我尝试从Android访问soap web服务。此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
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>