2012-03-13 60 views
0

我想我的界面的Android应用程序与我的SOAP Web服务,我得到意想不到的效果...Android和SOAP的Webservice

SOAP服务工作正常,他们已经用了SoapUI测试,WSDL是有效的。 我使用kso​​ap2库版本1.6.1

这里是我的调用代码:

try { 

     SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
     request.addProperty("prop1", 1); 
     request.addProperty("prop2", "FR"); 
     envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.setOutputSoapObject(request); 
     androidHttpTransport = new HttpTransportSE(URL); 
     androidHttpTransport.debug = true; 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapObject objetSOAP = (SoapObject)envelope.getResponse(); 
     Log.e("TESTSOAP", objetSOAP.getProperty(0).toString()); 
    } 
    catch (Exception e){ 
     Log.i("androidHttpTransport.requestDump", androidHttpTransport.requestDump); 
     e.printStackTrace(); 
     Log.i("androidHttpTransport.responseDump", androidHttpTransport.responseDump); 


    } 

我得到了一个异常的 “呼” 的方法,就是至极:

03-13 17:31:05.791: W/System.err(6020):  at 03-13 17:30:19.901: W/System.err(5976):   org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope (position:START_TAG .... @2:402 in [email protected]) 

什么奇怪的是,如果我使用requestDump来获取SoapUI中发送的信封来尝试它,它的工作原理非常好。我得到了预期的结果。但responseDump实际上是将我的wsdl文件返回给我,而不是结果。就像如果wsdl被称为罚款,但不是我想要调用的方法。

任何人都知道为什么?也许如何纠正它?

谢谢!

+0

尝试envelope.dotNet =真... – Kri 2012-03-13 19:12:35

+0

试了一下..没有任何改变:( – Ours 2012-03-14 08:36:10

+0

这一行更改运输声明... AndroidHttpTransport运输= new AndroidHttpTransport(URI); – Kri 2012-03-15 19:14:18

回答

0

该死的,终于找到了解决方案(个月后!) 显然,

androidHttpTransport = new HttpTransportSE(URL); 

不应该指向WSDL,但到PHP文件。

+1

Dear Ours, 你能告诉我什么你的意思是不应该指向wsdl,而是指向php文件。我正面临同样的问题 – 2013-11-19 15:25:46

0

类soapDemo扩展的AsyncTask {

 private final ProgressDialog dialog = new ProgressDialog(MainActivity.this); 
     private final String SOAP_ACTION = "YOUR_PATH"; 
     private final String METHOD_NAME = "METHOD_NAME"; 
     private final String NAMESPACE = "NAMESPACE (for ex.http://)"; 
     private final String URL = "URL"; 

    @Override 
    protected void onPreExecute() 
    { 
     this.dialog.setMessage("data Loading"); 
     this.dialog.show(); 
    } 

    @Override 
    protected Void doInBackground(Void... unused) 
    { 

     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME); 
     Request.addProperty("KEY", "VALUE"); 
     Request.addProperty("KEY", "VALUE"); 

     SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
     envelope.dotNet = true; 
     envelope.setOutputSoapObject(Request); 
     HttpTransportSE androidHttpTransport = new HttpTransportSE(URL); 

    try 
    { 
     androidHttpTransport.call(SOAP_ACTION, envelope); 
     SoapObject response = (SoapObject) envelope.getResponse(); 

     System.out.println("response"+response); 
     int Count = response.getPropertyCount(); 
     list= new String[Count];  


     for (int i = 0; i < Count; i++) 
     { 
      list[i] = response.getPropertyAsString(i).toString(); 
     } 

    } 

    catch (Exception e) 
    { 
    exc=true; 
    e.printStackTrace(); 
    } 
    return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    { 

     if (this.dialog.isShowing()) 
     { 
      this.dialog.dismiss(); 
     } 
     if(exc) 
     { 
      Toast.makeText(MainActivity.this,"Error" , Toast.LENGTH_LONG).show(); 
     } 
     else 
     { 
      spinner(); 
      exc=false; 
     } 
    } 
    } 

    public void spinner() 
    { 
     Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); 
     ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, list); 
     adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner1.setAdapter(adapter1); 

     spinner1.setOnItemSelectedListener(new OnItemSelectedListener() 
     { 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) 
      { 

      } 

      @Override 
      public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) 
      { 
      // your code 
      } 

     }); 
    }