2012-03-13 23 views
0

私は私のSOAP Webサービスと私のAndroidアプリケーションのインタフェースにしようとしている、と私は予想外の結果を得る...AndroidとSOAP Webサービス

SOAPサービスが正常に動作している、彼らはSOAPUIでテストされてきた、WSDLは有効です。 は、私がここでksoap2 libのバージョン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

+0

はそれを試してみました...この行を使用してトランスポート・ステートメントを変更する – Ours

+0

:(何も変更しませんでした... AndroidHttpTransport輸送してみてください= new AndroidHttpTransport(URI); – Kri

答えて

0

畜生、最終的には(数ヶ月後に!)解決策を見つけた どうやら、

androidHttpTransport = new HttpTransportSE(URL); 

はないWSDLへ、しかし、PHPファイルを指す必要があります。

+1

私たちの親愛なる皆さん、 どうすればいいですか?あなたはwsdlではなくphpファイルを指すべきであることを意味していますか?私は同じpoblemに直面しています –

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 
      } 

     }); 
    } 
関連する問題