2011-11-27 17 views
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) 
+0

什麼是錯誤信息?如果你想要有人幫助你,你需要提供更多細節。 – mihail

+0

好的,你很容易從webservice這條線上收到一些錯誤信息:SoapObject soapObject =(SoapObject)envelope.bodyIn;大多數情況下,您發送的消息格式不正確,並且webservice返回錯誤,無法將其作爲SoapObject輸入。 – mihail

+0

我認爲我犯了錯誤。我用元素創建了錯誤的xml。如何建立它正確? – icmeyecektim

回答

0

我解決問題,使用httpclient.I爲Android不會使用kso​​ap2。我將使用androidHTTPclient與AsyncTask。

相關問題