У меня много проблем с поиском хорошей информации о том, как вызвать стандартную веб-службу SOAP / WSDL с Android. Все, что мне удалось найти, - это либо очень запутанные документы и ссылки на «kSoap2», либо немного о разборе всего этого вручную с помощью SAX. Хорошо, это нормально, но сейчас 2008 год, поэтому я подумал, что должна быть хорошая библиотека для вызова стандартных веб-сервисов.
Веб-сервис - это просто сервис, созданный в NetBeans. Я хотел бы иметь поддержку IDE для создания классов сантехники. Мне просто нужен самый простой / самый элегантный способ связаться с веб-службой на основе WSDL с телефона на базе Android.
Вот очень хорошая ссылка на использование SOAP в android: Как вызвать веб-службу в Android с помощью SOAP
Взгляните на приведенную ниже ссылку, в которой есть подробный пример доступа к веб-сервису в Android с использованием Ksoap2 Доступ к веб-сервису с Android
Я считаю, что это возможно с Xamarin / C# с использованием .Net Core. см. blogs.msdn.microsoft.com/webdev/2016/05/25/…
инструмент от Spring выглядит многообещающе.




Я уверен, что вы могли бы создать небольшой SOAP-клиент с Ось. Инструкции по установке Axis.
Это сработало бы, только если бы ось была совместима с Android. Это не так (что-то о пакетах javax. * В зависимостях оси).
Android не предоставляет никаких библиотек SOAP. Вы можете написать свой собственный или использовать что-то вроде kSOAP 2. Как вы заметили, другие смогли скомпилировать и использовать kSOAP2 в своих проектах, но мне не пришлось.
На сегодняшний день Google не проявляет особого интереса к добавлению библиотеки SOAP в Android. Я подозреваю, что они предпочли бы поддерживать текущие тенденции в веб-службах в сторону служб на основе REST и использовать JSON в качестве формата инкапсуляции данных. Или, используя XMPP для обмена сообщениями. Но это всего лишь предположение.
В настоящее время веб-службы на основе XML - это несколько нетривиальная задача для Android. Не зная NetBeans, я не могу говорить о доступных там инструментах, но я согласен с тем, что должна быть доступна лучшая библиотека. Возможно, XmlPullParser избавит вас от использования SAX, но я мало что знаю об этом.
Да, думаю, мне придется создать REST-прокси. Кажется довольно странным, что Google не заинтересован в поддержке SOAP. Пробовал метод kSoap, действительно даже серьезной альтернативы нет. Это, в лучшем случае, уродливая привычка, требующая тщательного изучения групп новостей.
Причина, вероятно, в том, что протокол SOAP очень подробный и плохо справляется с ограничениями мобильных вычислений.
Этот ответ был бы улучшен, если бы кто-то мог предложить лучшую альтернативу вызывать веб-службы с помощью приложения для Android. Как только люди найдут этот вопрос и прочитают его, большинство из них будет искать именно это.
Обработка SOAP также требует больших затрат памяти и процессора по сравнению с более сжатым форматом, таким как JSON.
@MGOwen Лучшая альтернатива, которую я вижу, - это прокси. Реализуйте интерфейс REST-ful, который проксирует конверты SOAP через WSDL2Java.
@MGOwen, пожалуйста, проверьте мой ответ, в настоящее время это лучшая и единственная альтернатива, поскольку клиенты получают поддержку в отношении уплаченных лицензионных сборов.
Библиотека KSoap не может управлять огромным запросом или ответом. Все данные загружаются в память, поэтому может произойти сбой приложения и возникновение исключения OutOfMemory.
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);
Да, это был бы маршрут, по которому мне пришлось бы все разбирать вручную, я бы не получил объектно-ориентированного подхода.
Вы имеете в виду, что не получите бесплатный обед. Ручной синтаксический анализ не имеет ничего общего с объектно-ориентированным программированием. Я мог бы анализировать все на бумаге с помощью моего самого продвинутого инструмента - карандаша HB1, и это все равно было бы OO.
Я считаю, что под OO автор имел в виду привязку Java-XML. Каким будет ваш следующий шаг в этом подходе к синтаксическому анализу ответа? А если в нем сотни элементов, организованных в древовидную структуру?
Кстати, я бы ожидал по крайней мере HTTP POST, а не GET, если вы хотите, чтобы вам повезло с SOAP. Кроме того, где заголовки Accept и SOAPAction? Если вы действительно хотите стать коммандосом, для использования службы SOAP потребуется гораздо больше, чем эти 4 строки.
Если бы у меня были мои помощники, я бы не стал использовать SOAP для веб-служб для начала. Я бы пошел RESTful с XML или еще лучше JSON. Вы пишете клиент на мобильное устройство. Вы действительно хотите использовать само устройство для синтаксического анализа WSDL, автоматического создания поддерживающих классов, а затем самого прокси еще до того, как сделать первый вызов веб-службы? Как часто вы собираетесь это делать? Что именно за приложение? О.о
@NeilD: Что, если бы обстоятельства заставили вас использовать протокол SOAP, например веб-сервер использует протокол SOAP, и вы не можете это контролировать?
@bjarkef: kSOAP 2 кажется популярным выбором, согласно ответу выше. Хотя в использовании SOAP без него нет ничего изначально неуправляемого, это просто больше работы. Вы также можете написать прокси-сервер и отделить рассматриваемую веб-службу SOAP от вашего мобильного клиента, но это может оказаться гораздо более сложной задачей, чем простое внедрение kSOAP или другой подобной библиотеки.
Да, это не совсем ответ на вопрос ОП. Оказалось, что это полезно для меня (в моем случае меня даже не особо волнует ответ SOAP, мне просто нужно убедиться, что служба работает; поэтому, хотя это и разочаровывает, нет встроенной библиотеки SOAP, освежить в памяти, как сделать базовый POST в Android, удобно), но на самом деле это не отвечает на вопрос это.
Есть ли способ отправить заголовки XML без использования ksoap?
SOAP - неподходящая технология для использования на Android (или на мобильных устройствах в целом) из-за необходимости накладных расходов на обработку / синтаксический анализ. Услуги REST - это более легкое решение, и я бы посоветовал именно это. Android поставляется с парсером SAX, и его довольно просто использовать. Если вам абсолютно необходимо обрабатывать / анализировать SOAP на мобильном устройстве, мне жаль вас, лучший совет, который я могу предложить, - просто не использовать SOAP.
В аду есть особое место для тех, кто заставляет разработчиков использовать сервисы SOAP вместо REST API.
Это правда, что из-за накладных расходов SOAP - не лучший выбор для обмена данными с мобильными устройствами. Однако вы можете оказаться в ситуации, когда вы не контролируете формат вывода сервера.
Итак, если вам нужно придерживаться SOAP, здесь есть библиотека kSOAP2, исправленная для Android:
http://code.google.com/p/ksoap2-android/
У меня было свидание с KSOAP; Я выбрал более простой подход.
Учитывая файл WSDL, создайте шаблоны запросов SOAP для каждого запроса (например, с использованием пользовательского интерфейса SOAP), а затем замените значения, которые будут переданы в коде. Отправьте эти данные в конечную точку службы, используя экземпляр DefaultHttpClient, и получите поток ответа. Разберите поток ответа с помощью синтаксического анализатора XML Pull.
Если можете, выберите JSON. Android поставляется с полным пакетом org.json
Чтобы вызвать веб-службу с мобильного устройства (особенно на телефоне Android), я использовал очень простой способ сделать это. Я не использовал API-интерфейс клиента веб-службы при попытке вызвать веб-службу. Мой подход к звонку следующий.
HttpURLConnection.getResonseCode).ErrorInput на
тот же объект HTTP и получите
ошибка, если есть.Я реализовал эту процедуру для телефона Android, и она успешно работает. Я могу разобрать ответ, даже если он превышает 700 KB.
Надеюсь, Вызов веб-службы с Android поможет.
Вы можете посмотреть WSClient ++
Наконец, первый полезный ответ после повторения kSoap или SAX
Пробовал демо-версию. У меня не получилось на простую услугу. Не стоит тратить так много $$$$$.
Я создал новый клиент SOAP для платформы Android. Он использует сгенерированный JAX-WS интерфейс, но пока это только проверка концепции.
Если вам интересно, попробуйте этот пример и / или посмотрите источник на AndroidSOAP.
Я имел удовольствие присутствовать на вашей презентации на JUM XVII. Будапешт об Android. Продолжайте хорошую работу!
Думаю, Вызов веб-службы SOAP из приложения Android вам очень поможет.
Если вы можете использовать JSON, в Разработка сервисов приложений с помощью серверов PHP и телефонных клиентов Android есть технический документ, видео и sample.code.
Вызвать методы 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();
Около года назад я читал эту ветку, пытаясь понять, как выполнять вызовы SOAP на Android - предложения по созданию моей собственной библиотеки с использованием HttpClient привели к созданию моей собственной библиотеки SOAP для Android:
По сути, он позволяет вам создавать конверты для отправки через простой Java API, а затем автоматически анализировать их на объекты, которые вы определяете через XPath ... например:
<Dictionary>
<Id></Id>
<Name></Name>
</Dictionary>
Становится:
@XMLObject("//Dictionary")
public class Dictionary {
@XMLField("Id")
private String id;
@XMLField("Name")
private String name;
}
Я использовал его для своего собственного проекта, но я подумал, что это может помочь другим людям, поэтому я потратил некоторое время на его разделение и документирование. Мне бы очень понравилось, если бы некоторые из ваших бедных душ, которые наткнулись на эту ветку во время поиска в Google "SOAP Android", могли бы попробовать и получить некоторую выгоду.
вы работали с аутентификацией сеанса на Ice Soap?
Несколько месяцев назад я работал с веб-сервисом jax-ws в приложении j2ee. Там мы использовали CXF wsdl2java для создания заглушки клиента WS из файла WSDL, и с этими заглушками клиента мы использовали веб-сервисы. Несколько недель назад, когда я пытался использовать веб-службу таким же образом на платформе Android, я не мог, потому что в банке Android не все поддерживающие классы jax-ws. В тот раз я не нашел ни одного такого инструмента (если бы мне не удалось эффективно гуглить), чтобы удовлетворить мои требования -
Итак, я разработал свой собственный Инструмент создания клиента SOAP для Android. Где вам нужно выполнить следующие действия:
например:
ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();
SomeComplexRequest request = --Get some complex request----;
SomeComplexResp resp = port.operate( request );
Вы знаете, как бороться с Дата? Apache CXF переводит его в XMLGregorianCalendar, который я не могу создать в Android.
Если у вас возникла проблема с вызовом веб-службы в 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
}
}
Если у вас возникнут проблемы по этому поводу, напишите мне.
Выполните эти шаги с помощью метода SOAP.
Из файла WSDL
создавать шаблоны запросов SOAP для каждого запроса.
Затем подставьте значения, которые нужно передать в коде.
Отправьте эти данные в конечную точку службы, используя экземпляр DefaultHttpClient.
Получите поток ответов и, наконец,
Разберите поток ответа с помощью синтаксического анализатора XML Pull.
Чтобы вызвать веб-службу 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, как сравнить результат ответа с результатом ответа дающего: - успех ..... "response = 1 ~ Successfull" .... итак, как мы сравниваем этот результат с условиями, которые получены на стороне сервера ...... ..
DON'T FORGET TO ADD ksoap2.jar in your project and also add the INTERNET permission in AndroidManifest file
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);
}
}
}
HttpTransportSE где взять этот класс ??
Здравствуйте, я использую ваш код, но получаю следующую ошибку: Response :: AuthenticateTestResponse {AuthenticateTestResult = an yType {resultCode = Err или; messages = anyType {MessagesTypeMessage = anyType {code = E00014; text = Требуется аутентификация продавца .; }; }; }; } не могли бы вы мне помочь, пожалуйста?
привет, Амит, я тоже амит ..... Можете ли вы сказать мне, как мы сравниваем реакцию, когда мы получили ответ, успешный или нет, так как и при каких условиях проверить ответ ......
как добавить массив в xml свойства запроса?
Я бы посоветовал попробовать очень полезный инструмент, который мне очень помог. Парни люди, которые занимались этим проектом, тоже очень помогли. www.wsdl2code.com/
Это рабочий пример использования веб-сервисов SOAP в android.
** Примечание :: *** НЕ ЗАБУДЬТЕ ДОБАВИТЬ ksoap2.jar в свой проект, а также добавить разрешение INTERNET в файл 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();
}
}
пожалуйста, помогите мне в этом вопросе stackoverflow.com/questions/41573829/…
Для меня самый простой способ - использовать хороший инструмент для создания всех необходимых классов. Лично я пользуюсь этим сайтом:
Он поддерживает довольно сложные веб-службы и использует ksoap2.
Загрузите и добавьте файл библиотеки SOAP в свой проект. Имя файла: ksoap2-android-assembly-3.4.0-jar-с зависимостями
Очистите приложение, а затем запустите программу
Вот код для вызова службы 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/
Спасибо.
Добавьте Soap Libaray (ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar):
общедоступная статическая строка 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;
}
}
Вы можете выполнять мыльный вызов как сообщение через 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;
}
помогите пожалуйста здесь stackoverflow.com/questions/41573829/…
два вопроса по этому поводу: 1. Как это вызывается из основного действия? 2. Каким должно быть значение StringUrlShipment, передаваемого в качестве параметра?
к приведенному выше комментарию не обращайте внимания на вопрос №1.
Из основного действия вы должны использовать AsyncTask для вызова этого кода. Внутри этого класса AsyncTask реализуйте doInBackground для запуска этого кода.
Если кто-то ранее был знаком с MS VS, использование Mono для Android решит многие проблемы со службами данных и веб-службами, все просто и быстро. Также, кто не знаком с C# (код очень похож на Java), вся библиотека имеет одни и те же методы, некоторые функции заменены на свойства, поэтому имена почти такие же, и те, кто писал раньше на Java для Android, могут очень легко использовать свой опыт для написания C# код.