0
我嘗試從Android訪問soap web服務。這個soap服務需要登錄方法。我需要發送密碼和用戶名來檢索數據。我正在寫這段代碼,但它不起作用。如何在Android中將xml發送到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>
如何在android中構建併發送上述xml。
編輯:錯誤消息
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)
什麼是錯誤信息?如果你想要有人幫助你,你需要提供更多細節。 – mihail
好的,你很容易從webservice這條線上收到一些錯誤信息:SoapObject soapObject =(SoapObject)envelope.bodyIn;大多數情況下,您發送的消息格式不正確,並且webservice返回錯誤,無法將其作爲SoapObject輸入。 – mihail
我認爲我犯了錯誤。我用元素創建了錯誤的xml。如何建立它正確? – icmeyecektim