Как использовать веб-сервис с помощью ksoap2

Я пытаюсь использовать веб-сервис уже 2 дня, и мне это не удалось. Вот мой код:

String SOAP_ACTION = "urn:WsTestIntf-IWsTest#Test101";
                String METHOD_NAME = "Test101";
                String NAMESPACE = "urn:WsTestIntf-IWsTest";
                String URL = "http://wsig.127.cc:8465/WsTemp.dll/wsdl/IWsTest";

                String strTemp;

                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

                SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
                envelope.setOutputSoapObject(request);
                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
                try
                {
                    androidHttpTransport.call(SOAP_ACTION, envelope);
                    SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;

                    strTemp = resultsRequestSOAP.toString();


                } catch (Exception e) {
                    strTemp = "Error : " + e.getMessage();
                }

                Toast.makeText(getBaseContext(), strTemp, Toast.LENGTH_SHORT).show();

Что с этим не так? У меня есть разрешение INTERNET в моем манифесте. Веб-сервис написан на Delphi.


person Ago    schedule 26.09.2017    source источник


Ответы (1)


У меня были тяжелые времена с ksoap2, но у меня есть рабочий код на стороне клиента. Надеюсь, это поможет...

Примечание. Он повторяет попытку 3 раза, вы можете удалить его, если хотите.

import org.apache.http.client.ClientProtocolException;
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;

public class HttpClient {

    private static final String SOAP_ACTION = "http://tempuri.org/doPost";
    private static final String METHOD_NAME = "doPost";
    private static final String NAMESPACE = "http://tempuri.org/";
     private static final String URL = "url"

    private static int timeout = 10000;
    private static final int MAXTRY = 3;

    public String getXmlFromUrl(String xmlData) {
        String xml = null;

        int trycount = 0;
        do {
            try {
                // defaultHttpClient
                SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

                request.addProperty("data", xmlData);

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

                HttpTransportSE androidHttpTransport = new HttpTransportSE(URL,
                        timeout);

                try {
                    androidHttpTransport.call(SOAP_ACTION, envelope);
                } catch (XmlPullParserException e) {
                    e.printStackTrace();
                }

                SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
                if (result != null)
                    xml = result.toString();

            } catch (SocketTimeoutException e) {
                Log.e("Network", "timeout");
                trycount++;
                xml = "Request Timeout";
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                trycount = MAXTRY;
            } catch (ClientProtocolException e) {
                e.printStackTrace();
                trycount = MAXTRY;
            } catch (IOException e) {
                e.printStackTrace();
                xml = "Connection Error";
                trycount = MAXTRY;
            } finally {
                if (xml == null)
                    xml = ""; // to avoid exception in while condition
            }
        } while (trycount < MAXTRY && xml.equalsIgnoreCase("Request Timeout"));

        return xml == "" ? "Something Went Wrong Please Try Again!" : xml;
    }
}
person Audi    schedule 26.09.2017
comment
Я не могу передать эту строку кода: androidHttpTransport.call(SOAP_ACTION, конверт); - person Ago; 26.09.2017
comment
повторно попробовал ваш код, и теперь ошибка: ожидается: START_TAG {schemas.xmlsoap.org/soap /envelope}Конверт (позиция:START_TAG ‹definitions name='IWsTestservice' targetNamespace='tempuri .org/'›@2:351 в java.io.InputStreamReader@4e79b888) - person Ago; 26.09.2017
comment
Вы изменили метод, действие и пространство имен, чтобы они соответствовали вашим... Или вы можете вставить wsdl... - person Audi; 26.09.2017
comment
если вы проверяете мой wsdl, он не имеет защиты: wsig.127.cc: 8465/WsTemp.dll/wsdl/IWsTest - person Ago; 26.09.2017