Вопрос

Я пытаюсь воспользоваться моим приложением Android с помощью моего мыла WebServices, и я получаю неожиданные результаты ...

SOAP Services работает нормально, они были проверены с 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, чтобы попробовать его, он отлично работает.Я получил ожидаемый результат.Но Refteded Dam на самом деле возвращает меня файл WSDL, а не результат.Как только WSDL назывался нормальным, но не метод, который я пытаюсь вызвать.

Кто-нибудь получил представление о том, почему?И, возможно, как это исправить?

Спасибо!

Это было полезно?

Решение

Черт возьми, наконец нашел решение (месяц после!) Видимо,

   androidHttpTransport = new HttpTransportSE(URL);
.

должен указывать не в WSDL, а к файлу PHP.

Другие советы

Class SoapDemo расширяет асинктюз {

        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
            }

      });
    }
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top