Вопрос:

Как вызвать SOAP веб-сервис на Android

java android web-services soap wsdl

410855 просмотра

26 ответа

24171 Репутация автора

У меня много проблем с поиском полезной информации о том, как вызвать стандартный веб-сервис SOAP / WSDL с Android. Все, что мне удалось найти, это либо очень запутанные документы и ссылки на «kSoap2», а затем немного о синтаксическом анализе всего этого вручную с помощью SAX . Хорошо, это хорошо, но сейчас 2008 год, поэтому я решил, что должна быть хорошая библиотека для вызова стандартных веб-сервисов.

Веб-сервис - это просто сервис, созданный в NetBeans . Я хотел бы иметь поддержку IDE для создания классов сантехники. Мне просто нужен самый простой / самый элегантный способ связаться с веб-сервисом на основе WSDL с телефона на базе Android.

Автор: BobbyShaftoe Источник Размещён: 18.11.2008 01:32

Ответы (26)


9 плюса

3031 Репутация автора

Я уверен, что вы могли бы сделать небольшой SOAP-клиент с Axis . Инструкция по установке Axis .

Автор: branchgabriel Размещён: 18.11.2008 05:49

244 плюса

9933 Репутация автора

Решение

Android не предоставляет никакой библиотеки SOAP. Вы можете написать свой собственный или использовать что-то вроде kSOAP 2 . Как вы заметили, другие смогли скомпилировать и использовать kSOAP2 в своих собственных проектах, но мне не пришлось этого делать.

На сегодняшний день Google проявил небольшой интерес к добавлению библиотеки SOAP в Android. Я подозреваю, что они предпочли бы поддерживать текущие тенденции в веб-службах к службам на основе REST и использовать JSON в качестве формата инкапсуляции данных. Или используя XMPP для обмена сообщениями. Но это только догадка.

Веб-сервисы на базе XML в настоящее время являются немного нетривиальной задачей для Android. Не зная NetBeans, я не могу говорить о доступных там инструментах, но я согласен, что должна быть доступна лучшая библиотека. Возможно, что XmlPullParser избавит вас от использования SAX, но я мало что знаю об этом.

Автор: foxxtrot Размещён: 19.11.2008 09:50

99 плюса

1986 Репутация автора

org.apache.http.impl.client.DefaultHttpClientпоставляется в Android SDK по умолчанию. Это соединит вас с WSDL.

HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);
Автор: Neil Размещён: 08.01.2009 10:17

30 плюса

2437 Репутация автора

SOAP - неподходящая технология для использования на Android (или на мобильных устройствах в целом) из-за необходимости обработки / анализа. Услуги REST - это более легкое решение, и я бы это предложил. Android поставляется с SAX-парсером, и его довольно просто использовать. Если вам абсолютно необходимо обрабатывать / анализировать SOAP на мобильном устройстве, то мне вас жаль, лучший совет, который я могу предложить, - просто не использовать SOAP.

Автор: jasonhudgins Размещён: 12.01.2009 05:04

59 плюса

3422 Репутация автора

Это правда, что из-за накладных расходов SOAP - не лучший выбор для обмена данными с мобильными устройствами. Однако вы можете оказаться в ситуации, когда вы не контролируете формат вывода сервера.

Итак, если вам нужно придерживаться SOAP, здесь есть библиотека kSOAP2, исправленная для Android:
http://code.google.com/p/ksoap2-android/

Автор: Viktor Brešan Размещён: 10.10.2009 10:57

21 плюса

29521 Репутация автора

У меня был свидание с KSOAP; Я выбрал более простой подход.

Имея файл WSDL, создайте шаблоны запросов SOAP для каждого запроса (например, с помощью пользовательского интерфейса SOAP), а затем подставьте значения, передаваемые в коде. Отправьте эти данные в конечную точку службы, используя экземпляр DefaultHttpClient, и получите поток ответов. Разобрать поток ответов с помощью синтаксического анализатора XML Pull.

Автор: Samuh Размещён: 21.12.2009 04:10

15 плюса

151 Репутация автора

Если вы можете пойти на JSON. Android поставляется с полным пакетом org.json

Автор: Yves Размещён: 23.12.2009 03:14

31 плюса

329 Репутация автора

Для вызова веб-службы с мобильного устройства (особенно на телефоне Android) я использовал очень простой способ сделать это. Я не использовал API-интерфейс клиента веб-службы при попытке вызвать веб-службу. Мой подход заключается в следующем, чтобы позвонить.

  1. Создайте простое соединение HTTP с помощью стандартного API Java HttpURLConnection.
  2. Сформируйте SOAP-запрос. (Вы можете помочь SOAPUI сделать запрос SOAP.)
  3. Установите флаг doOutPut как true.
  4. Установите значения заголовка HTTP, такие как длина содержимого, тип содержимого и агент пользователя. Не забудьте установить значение Content-length, так как оно является обязательным.
  5. Запишите весь SOAP-запрос в выходной поток.
  6. Вызовите метод, чтобы установить соединение и получить ответ (в моем случае я использовал getResonseCode).
  7. Если вы получили код ответа как
    1. Это означает, что вам удалось вызвать веб-сервис.
  8. Теперь возьмите поток ввода в том же HTTP-соединении и получите строковый объект. Этот строковый объект является ответом SOAP.
  9. Если код ответа отличается от 200, тогда возьмите ErrorInputпоток в том же HTTPobject и получите ошибку, если таковая имеется.
  10. Разберите полученный ответ, используя SAXParser (в моем случае) или DOMParaser или любой другой механизм синтаксического анализа.

Я реализовал эту процедуру для телефона Android, и он успешно работает. Я могу проанализировать ответ, даже если он превышает 700 КБ.

Автор: Priyanjan Размещён: 04.02.2010 10:55

13 плюса

895 Репутация автора

Я надеюсь, что вызов веб-службы из Android поможет.

Автор: Monte Chan Размещён: 25.04.2010 01:06

17 плюса

31496 Репутация автора

Вы можете взглянуть на WSClient ++

Автор: Akash Kava Размещён: 15.07.2010 08:52

16 плюса

456 Репутация автора

Я создал новый клиент SOAP для платформы Android. Он использует сгенерированный интерфейс JAX-WS, но пока это только подтверждение концепции.

Если вы заинтересованы, пожалуйста, попробуйте пример и / или посмотрите источник на AndroidSOAP .

Автор: Gábor AUTH Размещён: 19.10.2010 03:42

8 плюса

425 Репутация автора

Я думаю, что Call SOAP Web Service из приложения Android вам очень поможет.

Автор: Srikanth Naidu Размещён: 28.01.2011 10:35

6 плюса

1598 Репутация автора

Если вы можете использовать JSON, есть документ, видео и образец.кода в разделе Разработка служб приложений с PHP-серверами и телефонами Android-клиентов .

Автор: Daniele Teti Размещён: 24.04.2011 10:07

14 плюса

1767 Репутация автора

Вызовите методы ksoap2 . Это работает очень хорошо.

Установите детали, как

private static String mNAMESPACE=null;
private static String mURL=null;
public static Context context=null;
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
envelope.setOutputSoapObject(Request);

envelope.addMapping(mNAMESPACE, "UserCredentials",new UserCredendtials().getClass());
AndroidHttpTransport androidHttpTransport = new AndroidHttpTransport(mURL);

а затем чтобы получить результат сделать

androidHttpTransport.call(SOAP_ACTION, envelope);
result = (SoapPrimitive)envelope.getResponse();
Автор: DEVANG SHARMA Размещён: 18.05.2011 07:19

24 плюса

484 Репутация автора

Около года назад я читал эту ветку, пытаясь выяснить, как выполнять вызовы SOAP на Android - благодаря предложениям по созданию собственного приложения с использованием HttpClient я создал собственную библиотеку SOAP для Android:

IceSoap

По сути, это позволяет вам создавать конверты для отправки через простой Java API, а затем автоматически анализировать их в объекты, которые вы определяете через XPath ... например:

<Dictionary>
    <Id></Id>
    <Name></Name>
</Dictionary>

становится:

@XMLObject("//Dictionary")
public class Dictionary {
    @XMLField("Id")
    private String id;

    @XMLField("Name")
    private String name;
}

Я использовал его для своего собственного проекта, но я подумал, что это может помочь некоторым другим людям, поэтому я потратил некоторое время на то, чтобы отделить его и задокументировать. Мне бы очень понравилось, если бы некоторые из ваших бедных душ, которые наткнулись на эту ветку, когда гуглили «SOAP Android», могли бы попробовать и получить какую-то выгоду.

Автор: Alex Gilleran Размещён: 29.01.2012 11:56

10 плюса

633 Репутация автора

Несколько месяцев назад я работал с веб-службой jax-ws в приложении j2ee. Там мы использовали CXF wsdl2java для генерации заглушки клиента WS из файла WSDL и с этими заглушками клиента мы использовали веб-службы. Несколько недель назад, когда я пытался использовать веб-сервис таким же образом на платформе Android, я не мог, потому что в банке Android есть не все классы, поддерживающие «jax-ws». В то время я не нашел ни одного такого инструмента (если не смог эффективно работать с Google), который бы соответствовал моим требованиям -

  • Получите заглушку клиента из WSDL.
  • И вызвать службу с некоторым аргументом (объект бизнес-запроса Java).
  • Получите ответ Бизнес-объект.

Итак, я разработал свой собственный инструмент генерации клиента Android SOAP . Где вы должны следовать этим шагам:

  • Из WSDL получите заглушку WS Client, вставьте ее в свой проект.
  • Скажем для какой-то службы «ComplexOperationService», создайте экземпляр службы, получите порт конечной точки, вызовите метод службы и получите ответ от веб-службы:

например:

ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();    
SomeComplexRequest request = --Get some complex request----;    
SomeComplexResp resp = port.operate( request  );
  • Вам не нужно заботиться о классе обслуживания / req / response или о любых других классах, а также о методе, поскольку вы знаете, что все они генерируются из WSDL.
  • И, конечно, вам не нужно знать о мыльном действии / конверте / пространстве имен и т. Д. Просто вызовите метод, как мы, разработчики, делаем все время.
Автор: Asraful Haque Размещён: 10.05.2012 03:53

5 плюса

1018 Репутация автора

Если у вас возникли проблемы с вызовом веб-службы в Android, вы можете использовать приведенный ниже код для вызова веб-службы и получения ответа. Убедитесь, что ваш веб-сервис возвращает ответ в формате таблицы данных. Этот код поможет вам, если вы используете данные из базы данных SQL Server . Если вы используете MYSQL, вам нужно изменить одну вещь, просто замените слово NewDataSet из предложения obj2=(SoapObject) obj1.getProperty("NewDataSet");на DocumentElement

void callWebService(){ 

private static final String NAMESPACE = "http://tempuri.org/"; // for wsdl it may be package name i.e http://package_name
private static final String URL = "http://localhost/sample/services/MyService?wsdl";
// you can use IP address instead of localhost
private static final String METHOD_NAME = "Function_Name";
private static final String SOAP_ACTION = "urn:" + METHOD_NAME;

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
    request.addProperty("parm_name", prm_value);// Parameter for Method
    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    envelope.dotNet = true;// **If your Webservice in .net otherwise remove it**
    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);

    try {
        androidHttpTransport.call(SOAP_ACTION, envelope);// call the eb service
                                                                                                         // Method
    } catch (Exception e) {
        e.printStackTrace();
    }

    // Next task is to get Response and format that response
    SoapObject obj, obj1, obj2, obj3;
    obj = (SoapObject) envelope.getResponse();
    obj1 = (SoapObject) obj.getProperty("diffgram");
    obj2 = (SoapObject) obj1.getProperty("NewDataSet");

    for (int i = 0; i < obj2.getPropertyCount(); i++) { 
// the method getPropertyCount() and  return the number of rows
            obj3 = (SoapObject) obj2.getProperty(i);
            obj3.getProperty(0).toString();// value of column 1
            obj3.getProperty(1).toString();// value of column 2
            // like that you will get value from each column
        }
    }

Если у вас есть какие-либо проблемы по этому поводу, вы можете написать мне ..

Автор: Sachin D Размещён: 21.05.2012 08:20

6 плюса

447 Репутация автора

Выполните следующие действия по методу SOAP

Из файла WSDL,

  • создавать шаблоны запросов SOAP для каждого запроса.

  • Затем подставьте значения, которые будут переданы в коде.

  • Отправьте эти данные в конечную точку службы, используя экземпляр DefaultHttpClient.

  • Получите ответный поток и, наконец,

  • Разобрать поток ответов с помощью синтаксического анализатора XML Pull.

Автор: Manick Размещён: 01.06.2012 09:20

2 плюса

705 Репутация автора

Чтобы вызвать веб-сервис SOAP с Android, попробуйте использовать этот клиент

НЕ ЗАБУДЬТЕ ДОБАВИТЬ ksoap2-android.jar в путь сборки Java

public class WsClient {
    private static final String SOAP_ACTION = "somme";
    private static final String OPERATION_NAME = "somme";
    private static final String WSDL_TARGET_NAMESPACE = "http://example.ws";
    private static final String SOAP_ADDRESS = "http://192.168.1.2:8080/axis2/services/Calculatrice?wsdl";

    public String caclculerSomme() {

        String res = null;
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                OPERATION_NAME);
        request.addProperty("a", "5");
        request.addProperty("b", "2");

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

        try {
            httpTransport.call(SOAP_ACTION, envelope);
            String result = envelope.getResponse().toString();
            res = result;
            System.out.println("############# resull is :" + result);
        } catch (Exception exception) {
            System.out.println("########### ERRER" + exception.getMessage());
        }

        return res;
    }
}
Автор: Wajdi Hh Размещён: 07.06.2012 12:13

24 плюса

1275 Репутация автора

НЕ ЗАБЫВАЙТЕ ДОБАВИТЬ ksoap2.jar в свой проект, а также добавьте разрешение ИНТЕРНЕТ в файле AndroidManifest

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.PropertyInfo;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapPrimitive;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class WebserviceActivity extends Activity {

    private static final String NAMESPACE = "https://api.authorize.net/soap/v1/";
    private static final String URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; 
    private static final String SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest";
    private static final String METHOD_NAME = "AuthenticateTest";
    private TextView lblResult;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lblResult = (TextView) findViewById(R.id.tv);

        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 
        request.addProperty("name","44vmMAYrhjfhj66fhJN");
        request.addProperty("transactionKey","9MDQ7fghjghjh53H48k7e7n");
        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
        envelope.setOutputSoapObject(request);
        HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
        try {
            androidHttpTransport.call(SOAP_ACTION, envelope);

            //SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            // SoapPrimitive  resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();
            SoapObject resultsRequestSOAP = (SoapObject) envelope.bodyIn;


            lblResult.setText(resultsRequestSOAP.toString());
            System.out.println("Response::"+resultsRequestSOAP.toString());


        } catch (Exception e) {
            System.out.println("Error"+e);
        }

    }
}
Автор: Amit kumar Размещён: 07.06.2012 06:50

5 плюса

1597 Репутация автора

Я бы предложил проверить очень полезный инструмент, который мне очень помог. Ребята, которые позаботились об этом проекте, тоже очень помогли. www.wsdl2code.com/

Автор: miroslavign Размещён: 28.05.2013 06:58

3 плюса

2151 Репутация автора

Это рабочий пример использования SOAP веб-сервисов в Android.

** Примечание :: *** НЕ ЗАБУДЬТЕ ДОБАВИТЬ ksoap2.jar в свой проект, а также добавить разрешение ИНТЕРНЕТ в файле AndroidManifest *

public final String WSDL_TARGET_NAMESPACE = "http://tempuri.org/";
public final String METHOD_NAME = "FahrenheitToCelsius";
public final String PROPERTY_NAME = "Fahrenheit";
public final String SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius";
public final String SOAP_ADDRESS = "http://www.w3schools.com/webservices/tempconvert.asmx";


private class TestAsynk extends AsyncTask<String, Void, String> {

    @Override
    protected void onPostExecute(String result) {

        super.onPostExecute(result);
        Toast.makeText(getApplicationContext(),
                String.format("%.2f", Float.parseFloat(result)),
                Toast.LENGTH_SHORT).show();
    }

    @Override
    protected String doInBackground(String... params) {
        SoapObject request = new SoapObject(WSDL_TARGET_NAMESPACE,
                METHOD_NAME);
        request.addProperty(PROPERTY_NAME, params[0]);

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

        envelope.setOutputSoapObject(request);

        HttpTransportSE androidHttpTransport = new HttpTransportSE(
                SOAP_ADDRESS);
        Object response = null;
        try {

            androidHttpTransport.call(SOAP_ACTION, envelope);
            response = envelope.getResponse();
            Log.e("Object response", response.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return response.toString();
    }
}
Автор: Arun Размещён: 30.07.2013 05:33

6 плюса

574 Репутация автора

Для меня самый простой способ - использовать хороший инструмент для генерации всех необходимых классов. Лично я пользуюсь этим сайтом:

http://easywsdl.com/

Он поддерживает довольно сложные веб-сервисы и использует ksoap2.

Автор: robocik Размещён: 13.11.2013 06:54

4 плюса

111 Репутация автора

Загрузите и добавьте файл библиотеки SOAP вместе с вашим проектом. Имя файла: ksoap2-android-assembly-3.4.0-jar-with-dependencies

Очистите приложение и затем запустите программу

Вот код для вызова службы SOAP

    String SOAP_ACTION = "YOUR_ACTION_NAME";
    String METHOD_NAME = "YOUR_METHOD_NAME";
    String NAMESPACE = "YOUR_NAME_SPACE";
    String URL = "YOUR_URL";
    SoapPrimitive resultString = null;

    try {
        SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);
        addPropertyForSOAP(Request);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        soapEnvelope.dotNet = true;
        soapEnvelope.setOutputSoapObject(Request);

        HttpTransportSE transport = new HttpTransportSE(URL);

        transport.call(SOAP_ACTION, soapEnvelope);
        resultString = (SoapPrimitive) soapEnvelope.getResponse();

        Log.i("SOAP Result", "Result Celsius: " + resultString);
    } catch (Exception ex) {
        Log.e("SOAP Result", "Error: " + ex.getMessage());
    }
    if(resultString != null) {
        return resultString.toString();
    }
    else{
        return "error";
    }

Результаты могут быть JSONObject или JSONArray или String

Для вашей лучшей ссылки, https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/

Благодарю.

Автор: lokesh s Размещён: 08.12.2015 01:02

1 плюс

46 Репутация автора

Добавьте мыло Libaray ( ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar):

public static String Fn_Confirm_CollectMoney_Approval (

        HashMap < String, String > str1,
        HashMap < String, String > str2,
        HashMap < String, String > str3) {

    Object response = null;
    String METHOD_NAME = "CollectMoney";
    String NAMESPACE = "http://xxx/yyy/xxx";
    String URL = "http://www.w3schools.com/webservices/tempconvert.asmx";
    String SOAP_ACTION = "";

    try {

        SoapObject RequestParent = new SoapObject(NAMESPACE, METHOD_NAME);

        SoapObject Request1 = new SoapObject(NAMESPACE, "req");

        PropertyInfo pi = new PropertyInfo();

        Set mapSet1 = (Set) str1.entrySet();

        Iterator mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            String keyValue = (String) mapEntry.getKey();

            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        mapSet1 = (Set) str3.entrySet();

        mapIterator1 = mapSet1.iterator();

        while (mapIterator1.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator1.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            Request1.addProperty(pi);
        }

        SoapObject HeaderRequest = new SoapObject(NAMESPACE, "XXX");

        Set mapSet = (Set) str2.entrySet();

        Iterator mapIterator = mapSet.iterator();

        while (mapIterator.hasNext()) {

            Map.Entry mapEntry = (Map.Entry) mapIterator.next();

            // getKey Method of HashMap access a key of map
            String keyValue = (String) mapEntry.getKey();

            // getValue method returns corresponding key's value
            String value = (String) mapEntry.getValue();

            pi = new PropertyInfo();

            pi.setNamespace("java:com.xxx");

            pi.setName(keyValue);

            pi.setValue(value);

            HeaderRequest.addProperty(pi);
        }

        Request1.addSoapObject(HeaderRequest);

        RequestParent.addSoapObject(Request1);

        SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                SoapEnvelope.VER10);

        soapEnvelope.dotNet = false;

        soapEnvelope.setOutputSoapObject(RequestParent);

        HttpTransportSE transport = new HttpTransportSE(URL, 120000);

        transport.debug = true;

        transport.call(SOAP_ACTION, soapEnvelope);

        response = (Object) soapEnvelope.getResponse();

        int cols = ((SoapObject) response).getPropertyCount();

        Object objectResponse = (Object) ((SoapObject) response)
                .getProperty("Resp");

        SoapObject subObject_Resp = (SoapObject) objectResponse;


        modelObject = new ResposeXmlModel();

        String MsgId = subObject_Resp.getProperty("MsgId").toString();


        modelObject.setMsgId(MsgId);

        String OrgId = subObject_Resp.getProperty("OrgId").toString();


        modelObject.setOrgId(OrgId);

        String ResCode = subObject_Resp.getProperty("ResCode").toString();


        modelObject.setResCode(ResCode);

        String ResDesc = subObject_Resp.getProperty("ResDesc").toString();


        modelObject.setResDesc(ResDesc);

        String TimeStamp = subObject_Resp.getProperty("TimeStamp")
                .toString();


        modelObject.setTimestamp(ResDesc);

        return response.toString();

    } catch (Exception ex) {

        ex.printStackTrace();

        return null;
    }

}
Автор: Mani Размещён: 30.05.2016 11:27

2 плюса

1317 Репутация автора

Вы можете выполнить мыльный вызов как сообщение через http с определенными заголовками. Я решил этот вопрос без дополнительных библиотек, таких как ksoap2. Вот живой код получения заказов от службы мыла.

private static HashMap<String,String> mHeaders = new HashMap<>();

static {
    mHeaders.put("Accept-Encoding","gzip,deflate");
    mHeaders.put("Content-Type", "application/soap+xml");
    mHeaders.put("Host", "35.15.85.55:8080");
    mHeaders.put("Connection", "Keep-Alive");
    mHeaders.put("User-Agent","AndroidApp");
    mHeaders.put("Authorization","Basic Q2xpZW50NTkzMzppMjR3s2U="); // optional
}public final static InputStream receiveCurrentShipments(String stringUrlShipments)
{
    int status=0;
    String xmlstring= "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:ser=\"http://35.15.85.55:8080/ServiceTransfer\">\n" +
            "   <soap:Header/>\n" +
            "   <soap:Body>\n" +
            "      <ser:GetAllOrdersOfShipment>\n" +
            "         <ser:CodeOfBranch></ser:CodeOfBranch>\n" +
            "      </ser:GetAllOrdersOfShipment>\n" +
            "   </soap:Body>\n" +
            "</soap:Envelope>";
    StringBuffer chaine = new StringBuffer("");

    HttpURLConnection connection = null;
    try {
        URL url = new URL(stringUrlShipments);
        connection = (HttpURLConnection) url.openConnection();
        connection.setRequestProperty("Content-Length", xmlstring.getBytes().length + "");
        connection.setRequestProperty("SOAPAction", "http://35.15.85.55:8080/ServiceTransfer/GetAllOrdersOfShipment");

        for(Map.Entry<String, String> entry : mHeaders.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            connection.setRequestProperty(key,value);

        }

        connection.setRequestMethod("POST");
        connection.setDoInput(true);

        OutputStream outputStream = connection.getOutputStream();
        outputStream.write(xmlstring.getBytes("UTF-8"));
        outputStream.close();

        connection.connect();
        status = connection.getResponseCode();
    } catch (ProtocolException e) {
        e.printStackTrace();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {

        Log.i("HTTP Client", "HTTP status code : " + status);
    }

    InputStream inputStream = null;
    try {
        inputStream = connection.getInputStream();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return inputStream;
}
Автор: Lapenkov Vladimir Размещён: 19.08.2016 05:42
Вопросы из категории :
32x32