Использование сервиса SOAP - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь подключиться к службе SOAP w3school.com, но она не работает.

Сначала я попробовал так, как читал в уроках. Таким образом, я получил stream closed exception.

Затем я попытался использовать класс KeepAliveHttpsTransportSE. Таким образом я получил другое исключение .

org.xmlpull.v1.XmlPullParserException: expected: START_TAG {http://schemas.xmlsoap.org/soap/envelope/} Envelope (position:START_TAG <html lang='en-US'>@3:20 in java.io.InputStreamReader@f298f58) e.printStackTrace();

Я работал над этой проблемой в течение нескольких дней, но я не вижу, что я делаю неправильно. Может быть, кто-то может мне помочь.

У меня есть интернет-разрешение, и я включил библиотеку ksoap2-android-assembly-3.6.2-jar-with-dependencies.jar

    public class MainActivity extends AppCompatActivity {
    private Context sContext;


    // SOAP TEST

    private static final String SOAP_ACTION = "https://www.w3schools.com/xml/CelsiusToFahrenheit";
    private static final String METHOD_NAME = "CelsiusToFahrenheit";
    private static final String NAMESPACE = "https://www.w3schools.com/xml/";


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        sContext = this;

        myAsyncTask myRequest = new myAsyncTask();
        myRequest.execute();

    }

    private class myAsyncTask extends AsyncTask<Void, Void, Void> {

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


            String URL = "http://www.w3schools.com/xml/tempconvert.asmx";

            SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
            request.addProperty("Celsius", "48"); // adding method property here serially

            SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            envelope.implicitTypes = true;
            envelope.setOutputSoapObject(request);
            envelope.dotNet = true;


            KeepAliveHttpsTransportSE keepAliveHttpsTransportSE = new KeepAliveHttpsTransportSE("www.w3schools.com", 443, "", 30000);
            keepAliveHttpsTransportSE.debug = true;

            //HttpTransportSE httpTransport = new HttpTransportSE(URL);
            //httpTransport.debug = true;

            Log.i("mmb Envelop", envelope.toString());


            try {
                //httpTransport.call(SOAP_ACTION, envelope);
                keepAliveHttpsTransportSE.call(SOAP_ACTION, envelope);
            } catch (HttpResponseException e) {
                // TODO Auto-generated catch block
                Log.e("mmb HTTPLOG", e.getMessage());
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                Log.e("mmb IOLOG", e.getMessage());
                // Message: java.io.IOException: Stream closed
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                Log.e("mmb XMLLOG", e.getMessage());
                // Message: org.xmlpull.v1.XmlPullParserException: expected:
                // START_TAG {http://schemas.xmlsoap.org/soap/envelope/}Envelope
                // (position:START_TAG <html lang='en-US'>@3:20 in java.io.InputStreamReader@f298f58)
                e.printStackTrace();
            } //send request

            Object  result = null;
            try {
                result = (Object )envelope.getResponse();
                Log.i("mmb RESPONSE",String.valueOf(result)); // see output in the console
            } catch (SoapFault e) {
                // TODO Auto-generated catch block
                Log.e("mmb SOAPLOG", e.getMessage());
                e.printStackTrace();
            }
            return null;
        }
    }
}

1 Ответ

0 голосов
/ 07 мая 2018

Проблема в сервисах w3school, а не в вашем коде .. попробуйте другие сервисы

The error comes up when i hit the services in browser

...