0

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);


    }

「call」メソッドで例外が発生しました。次のとおりです。

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 java.io.InputStreamReader@46294968) 

奇妙なのは、requestDump を使用して SoapUI で送信されたエンベロープを取得して試してみると、完全に正常に動作することです。期待通りの結果が得られました。しかし、responseDump は実際には結果ではなく wsdl ファイルを返しています。wsdl が正常に呼び出された場合と同じように、呼び出しようとしているメソッドではありません。

誰でも理由がわかりますか?そして多分それを修正する方法は?

ありがとう !

4

2 に答える 2

0

class 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
            }

      });
    }
于 2015-10-12T05:33:46.940 に答える
0

くそー、ついに解決策を見つけた(数か月後!)どうやら、

   androidHttpTransport = new HttpTransportSE(URL);

wsdl ではなく、php ファイルを指す必要があります。

于 2012-10-05T15:47:20.700 に答える