Jak wywołać usługę internetową SOAP na Androida [zamknięty]
chcesz poprawić to pytanie? Update the pytanie więc to on-topic {[3] } dla przepełnienia stosu.
Zamknięte 3 lata temu .
Popraw to pytanieMam duży problem ze znalezieniem dobrych informacji na temat tego, jak zadzwonić do standardowej usługi internetowej SOAP/WSDL z Androidem. Wszystko co udało mi się znaleźć to albo bardzo zawiłe dokumenty i odniesienia do "kSoap2", a potem trochę o parsowaniu tego wszystkiego ręcznie za pomocą SAX . OK, w porządku, ale jest rok 2008, więc pomyślałem, że powinna być jakaś dobra biblioteka do wywoływania standardowych usług internetowych.
Serwis internetowy jest w zasadzie jednym stworzonym w NetBeans . Chciałbym mieć wsparcie IDE dla generowania klas hydraulicznych. Po prostu potrzebuję najprostszego / najbardziej eleganckiego sposobu skontaktowania się z WSDL z telefonu opartego na Androidzie.
26 answers
Android nie udostępnia żadnej biblioteki SOAP. Możesz albo napisać własne, albo użyć czegoś w rodzaju kSOAP 2 . Jak zauważyłeś, inni byli w stanie skompilować i używać kSOAP2 w swoich własnych projektach, ale ja nie musiałem.
Google do tej pory nie wykazywało większego zainteresowania dodaniem biblioteki SOAP do Androida. Moje podejrzenie jest takie, że wolą wspierać obecne trendy w usługach internetowych w kierunku usług opartych na REST i używać JSON jako formatu kapsułkowania danych. Lub za pomocą XMPP do przesyłania wiadomości. Ale to tylko domysły.
Usługi internetowe oparte na XML są w tej chwili nieco nietrywialnym zadaniem na Androidzie. Nie znając NetBeans, nie mogę rozmawiać z dostępnymi tam narzędziami, ale Zgadzam się, że powinna być dostępna lepsza biblioteka. Możliwe, że XmlPullParser uchroni Cię przed używaniem SAX - a, ale niewiele o tym wiem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-19 21:50:32
org.apache.http.impl.client.DefaultHttpClient
jest domyślnie w Android SDK. Dzięki temu połączysz się z WSDL.
HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpGet httpGet = new HttpGet("http://www.example.com/" + URL);
HttpResponse response = httpClient.execute(httpGet, localContext);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-06 13:47:07
To prawda, że ze względu na jego napowietrzne SOAP nie jest najlepszym wyborem do wymiany danych z urządzeniami mobilnymi. Możesz jednak znaleźć się w sytuacji, w której nie kontrolujesz formatu wyjścia serwera.
Więc, jeśli musisz trzymać się SOAP, jest biblioteka kSOAP2 załatana dla Androida tutaj:
http://code.google.com/p/ksoap2-android/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-26 13:56:11
Aby zadzwonić do usługi internetowej z urządzenia mobilnego (szczególnie na telefon z Androidem), użyłem bardzo prostego sposobu, aby to zrobić. Nie używałem żadnego API klienta usługi web service przy próbie wywołania usługi web service. Moje podejście jest następujące, aby zadzwonić.
- Tworzenie prostego połączenia HTTP przez
korzystanie ze standardowego API Java
HttpURLConnection
.
Formularz Zapytania o mydło. (Możesz zrobić
pomoc SOAPUI zrobić mydło
Prośba.)
- Ustawia znacznik doOutPut jako true.
- Ustawianie wartości nagłówka HTTP jak content-długość, treść typ i User-agent. Nie zapomnij aby ustawić wartość Content-length, ponieważ jest to obowiązkowe.
- zapisuje całe żądanie SOAP do strumienia wyjściowego.
- wywołanie metody nawiązania połączenia i
otrzymać odpowiedź (w moim przypadku użyłem
getResonseCode
). - Jeśli otrzymałeś kod odpowiedzi jako
- to znaczy, że udało Ci się zadzwonić do serwisu internetowego.
- Teraz weź strumień wejściowy na tym samym Połączenie HTTP i otrzymać obiekt typu string. To obiekt string jest odpowiedź mydła.
- Jeśli kod odpowiedzi jest inny niż
200 następnie wybierz
ErrorInput
strumień na ten sam HTTPobject i otrzymać błąd, jeśli występuje. - przeanalizuj otrzymaną odpowiedź za pomocą Saxparsera (w moim przypadku) lub DOMParaser lub inny parsing mechanizm.
Zaimplementowałem tę procedurę dla telefonu z Androidem i z powodzeniem działa. Jestem w stanie przeanalizować odpowiedź, nawet jeśli jest ona większa niż 700 KB.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-19 23:49:38
SOAP jest źle dostosowaną technologią do użytku na Androidzie (lub urządzeniach mobilnych w ogóle) ze względu na wymagane koszty przetwarzania/parsowania. Usługi wypoczynkowe to lżejsze rozwiązanie i to właśnie proponowałbym. Android jest wyposażony w parser saksofonu i jest dość trywialny w użyciu. Jeśli jesteś absolutnie zobowiązany do obsługi / analizowania SOAP na urządzeniu mobilnym, to współczuję ci, najlepszą radą, jaką mogę zaoferować, jest po prostu nie używać SOAP.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-12 17:04:32
Około rok temu czytałem ten wątek, próbując dowiedzieć się, jak wykonywać połączenia SOAP na Androida - sugestie, aby zbudować własny za pomocą HttpClient zaowocowały zbudowaniem własnej biblioteki SOAP dla Androida:
Zasadniczo pozwala na tworzenie kopert do wysyłania za pośrednictwem prostego Java API, a następnie automatycznie parsuje je do obiektów, które definiujesz za pomocą XPath... na przykład:
<Dictionary>
<Id></Id>
<Name></Name>
</Dictionary>
Staje się:
@XMLObject("//Dictionary")
public class Dictionary {
@XMLField("Id")
private String id;
@XMLField("Name")
private String name;
}
Używałem go do własnego projektu, ale pomyślałem, że to może pomóc innym ludziom, więc spędziłem trochę czasu na oddzielaniu tego i dokumentowaniu tego. Naprawdę chciałbym, aby niektóre z Twoich biednych dusz, które natknęły się na ten wątek podczas googlowania "SOAP Android", mogły dać temu szansę i uzyskać jakieś korzyści.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-19 21:00:37
Nie zapomnij dodać ksoap2.jar w swoim projekcie, a także dodać Uprawnienia internetowe w pliku 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);
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-18 16:53:36
Miałem swoją schadzkę z KSOAP; wybrałem raczej prostsze podejście.
Biorąc pod uwagę plik WSDL, Utwórz szablony żądań SOAP dla każdego żądania (np.: using SOAP UI), a następnie zastąp wartości przekazywane w kodzie. Wyślij te dane do punktu końcowego usługi za pomocą wystąpienia DefaultHttpClient i uzyskaj strumień odpowiedzi. Parse strumień odpowiedzi za pomocą XML Pull parser.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-21 16:10:07
Możesz rzucić okiem na WSClient++
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-15 08:52:51
Stworzyłem nowego klienta SOAP dla Platformy Android. Używa interfejsu generowanego przez JAX-WS, ale jak na razie jest to tylko proof-of-concept.
Jeśli jesteś zainteresowany, wypróbuj przykład i / lub obejrzyj źródło na AndroidSOAP .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 13:48:36
Jeśli możesz, idź po JSON. Android jest dostarczany z kompletnym org.pakiet json
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-23 15:14:28
Wywołaj metody ksoap2 . Działa bardzo dobrze.
Ustaw szczegóły, jak
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);
A następnie aby uzyskać wynik zrób
androidHttpTransport.call(SOAP_ACTION, envelope);
result = (SoapPrimitive)envelope.getResponse();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-07 15:49:31
I hope wywołanie usługi internetowej z Androida pomaga.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 13:43:49
Kilka miesięcy temu pracowałem z JAX-WS web service w aplikacji j2ee, tam używaliśmy CXF wsdl2java do generowania stubów klienta Ws z pliku WSDL i z tymi stubami klienta korzystaliśmy z usług internetowych. Kilka tygodni temu, kiedy starałem się konsumować usługę internetową w taki sam sposób na platformie android, nie mogłem, ponieważ android jar nie ma w sobie wszystkich klas wspierających "jax-ws". Tym razem nie znalazłem żadnego takiego narzędzia (jeśli nie udało mi się skutecznie google) do spełnij moje wymagania --
- Pobierz stub klienta z WSDL.
- i wywołanie usługi z jakimś argumentem (java business request obiekt).
- Get the Response Business Object.
- z WSDL Pobierz Stub klienta WS, umieść go w swoim projekcie.
- powiedzmy, że dla jakiejś usługi "ComplexOperationService", Instantiate the Serwis, Pobierz Endpoint port i wywołanie metody service i uzyskanie odpowiedzi z usługi sieci Web:
Eg:
ComplexOperationService service = new ComplexOperationService( );
ComplexOperation port= service.getComplexOperationPort();
SomeComplexRequest request = --Get some complex request----;
SomeComplexResp resp = port.operate( request );
- nie musisz przejmować się klasami service class / req/response lub innymi klasami i metodą, ponieważ wiesz, że wszystkie są generowane z WSDL.
- i oczywiście nie musisz być świadomy działania soap/envelop / przestrzeni nazw itp. Po prostu zadzwoń do metody, jak my, deweloperzy robią cały czas.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-06 15:53:48
Jestem pewien, że mógłbyś zrobić małego klienta mydła z Axis. Instrukcja Instalacji Axis .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 13:34:21
Myślę wywołaj usługę Soap z aplikacji Android bardzo ci pomoże.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-25 13:49:39
Wykonaj te kroki metodą SOAP
Z pliku WSDL,
Twórz szablony żądań SOAP dla każdego żądania.
Następnie zastąp wartości, które mają zostać przekazane w kodzie.
Wyślij te dane do punktu końcowego usługi za pomocą wystąpienia DefaultHttpClient.
-
Get the response stream and finally
Parse strumień odpowiedzi za pomocą XML Pull parser.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-01 09:20:04
Jeśli możesz użyć JSON, jest biała księga, wideo i próbka.kod w Tworzenie usług aplikacyjnych z serwerami PHP i klientami telefonów z systemem Android.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-05 13:24:09
Dla mnie najprostszym sposobem jest użycie dobrego narzędzia do generowania wszystkich wymaganych klas. Osobiście korzystam z tej strony:
Obsługuje dość złożone Usługi internetowe i korzysta z ksoap2.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-13 06:54:42
Proponuję sprawdzić bardzo przydatne narzędzie, które bardzo mi pomogło. The guys którzy zajmują się tym projektem byli bardzo pomocni. www.wsdl2code.com/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-28 06:58:45
Jeśli masz problem z wywołaniem usługi internetowej w Androidzie, to
Możesz użyć poniższego kodu, aby zadzwonić do serwisu internetowego i uzyskać odpowiedź. Upewnij się, że usługa internetowa zwraca odpowiedź w formacie tabeli danych ..Ten kod pomoże ci, jeśli korzystasz z danych z bazy danych SQL Server. Jeśli używasz MYSQL musisz zmienić jedną rzecz po prostu zamień słowo NewDataSet ze zdania obj2=(SoapObject) obj1.getProperty("NewDataSet");
na 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
}
}
Jeśli masz jakieś problem dotyczący tego możesz napisać do mnie..
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-07 10:48:13
Jest to roboczy przykład korzystania z usług internetowych SOAP w Androidzie.
**uwaga:: * * * nie zapomnij dodać ksoap2.jar w projekcie, a także dodać uprawnienia internetowe w pliku 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();
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-27 14:15:36
Pobierz i dodaj plik biblioteki SOAP do swojego projektu Nazwa pliku: ksoap2-android-assembly-3.4.0-jar-with-dependencies
Wyczyść aplikację, a następnie uruchom program
Oto kod do wywołania usługi 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";
}
Wyniki mogą być JSONObject lub JSONArray lub String
Dla lepszego odniesienia, https://trinitytuts.com/load-data-from-soap-web-service-in-android-application/
Dzięki.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-08 13:02:13
Możesz wykonywać soap jako post przez http z pewnymi nagłówkami. Rozwiązałem to pytanie bez dodatkowych bibliotek jak ksoap2 Oto kod na żywo otrzymujący zamówienia z serwisu soap
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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-19 05:47:28
Aby wywołać usługę soap z Androida, spróbuj użyć tego klienta
Nie zapomnij dodać ksoap2-android.jar w ścieżce budowania Javy
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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-15 18:35:19
Dodaj Soap 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;
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 22:53:16