Comment appeler un service Web SOAP sur Android

J’ai beaucoup de mal à trouver de bonnes informations sur la façon d’appeler un service Web SOAP / WSDL standard avec Android. Tout ce que j’ai pu trouver, ce sont des documents très compliqués et des références à “kSoap2”, puis un peu d’parsing syntaxique manuelle avec SAX . OK, ça va, mais c’est en 2008, alors j’ai pensé qu’il devrait y avoir une bonne bibliothèque pour appeler des services Web standard.

Le service Web est essentiellement un service créé dans NetBeans . Je voudrais avoir un support IDE pour générer les classes de plomberie. J’ai juste besoin de la manière la plus simple / la plus élégante de contacter un service Web basé sur WSDL à partir d’un téléphone Android.

    Android ne fournit aucune sorte de bibliothèque SOAP. Vous pouvez écrire votre propre texte ou utiliser quelque chose comme kSOAP 2 . Comme vous l’avez noté, d’autres ont pu comstackr et utiliser kSOAP2 dans leurs propres projets, mais je n’ai pas eu à le faire.

    Google a montré, à ce jour, peu d’intérêt pour l’ajout d’une bibliothèque SOAP à Android. À mon avis, ils préfèrent prendre en charge les tendances actuelles des services Web vers les services basés sur REST et utiliser JSON comme format d’encapsulation de données. Ou, en utilisant XMPP pour la messagerie. Mais ce n’est que conjecture.

    Les services Web basés sur XML sont actuellement une tâche légèrement insignifiante sur Android. Ne connaissant pas NetBeans, je ne peux pas parler des outils disponibles, mais je conviens qu’une meilleure bibliothèque devrait être disponible. Il est possible que le XmlPullParser vous évite d’utiliser SAX, mais je n’en sais pas beaucoup.

    org.apache.http.impl.client.DefaultHttpClient est disponible par défaut dans le SDK Android. Cela vous permettra de vous connecter au WSDL.

     HttpClient httpClient = new DefaultHttpClient(); HttpContext localContext = new BasicHttpContext(); HttpGet httpGet = new HttpGet("http://www.example.com/" + URL); HttpResponse response = httpClient.execute(httpGet, localContext); 

    Il est vrai qu’en raison de sa surcharge, SOAP n’est pas le meilleur choix pour l’échange de données avec des appareils mobiles. Cependant, vous risquez de ne pas contrôler le format de sortie du serveur.

    Donc, si vous devez vous en tenir à SOAP, une bibliothèque kSOAP2 est installée pour Android ici:
    http://code.google.com/p/ksoap2-android/

    Pour appeler un service Web depuis un appareil mobile (en particulier sur un téléphone Android), j’ai utilisé un moyen très simple de le faire. Je n’ai utilisé aucune API client de service Web pour tenter d’appeler le service Web. Mon approche est la suivante pour passer un appel.

    1. Créez une connexion HTTP simple à l’aide de l’API standard Java HttpURLConnection .
    2. Formez une requête SOAP. (Vous pouvez faire l’aide de SOAPUI pour faire une requête SOAP.)
    3. Définissez l’indicateur doOutPut sur true.
    4. Définissez les valeurs d’en-tête HTTP comme la longueur du contenu, le type de contenu et l’agent utilisateur. N’oubliez pas de définir la valeur Content-length car c’est obligatoire.
    5. Ecrivez toute la requête SOAP au stream de sortie.
    6. Appelez la méthode pour établir une connexion et recevez la réponse (dans mon cas, j’ai utilisé getResonseCode ).
    7. Si votre code de réponse reçu est
      1. Cela signifie que vous avez réussi à appeler le service Web.
    8. Prenez maintenant un stream d’entrée sur la même connexion HTTP et recevez l’object chaîne. Cet object chaîne est une réponse SOAP.
    9. Si le code de réponse est différent de 200, prenez un stream ErrorInput sur le même object HTTP et recevez l’erreur, le cas échéant.
    10. Analyser la réponse reçue en utilisant SAXParser (dans mon cas) ou DOMParaser ou tout autre mécanisme d’parsing.

    J’ai implémenté cette procédure pour le téléphone Android et elle fonctionne correctement. Je suis capable d’parsingr la réponse même si elle dépasse 700 Ko.

    SOAP est une technologie inadaptée à utiliser sur Android (ou les appareils mobiles en général) en raison de la surcharge de traitement / parsing requirejse. Un service REST est une solution plus légère et c’est ce que je suggère. Android est livré avec un parsingur SAX, et c’est assez sortingvial à utiliser. Si vous êtes absolument obligé de gérer / parsingr SOAP sur un appareil mobile, je suis désolé pour vous, le meilleur conseil que je puisse vous donner est de ne pas utiliser SOAP.

    Il y a environ un an, je lisais ce fil en essayant de comprendre comment faire des appels SOAP sur Android – les suggestions pour créer mon propre en utilisant HttpClient m’ont amené à créer ma propre bibliothèque SOAP pour Android:

    IceSoap

    Fondamentalement, il vous permet de créer des enveloppes à envoyer via une simple API Java, puis de les parsingr automatiquement en objects que vous définissez via XPath …, par exemple:

         

    Devient:

     @XMLObject("//Dictionary") public class Dictionary { @XMLField("Id") private Ssortingng id; @XMLField("Name") private Ssortingng name; } 

    Je l’utilisais pour mon propre projet mais je pensais que cela pourrait aider d’autres personnes alors j’ai passé du temps à le séparer et à le documenter. Je serais vraiment ravi que certaines de vos pauvres âmes qui trébucheraient sur ce sujet en faisant des recherches sur Google “SOAP Android” puissent le faire et obtenir des avantages.

    N’OUBLIEZ PAS D’AJOUTER ksoap2.jar dans votre projet et d’append également l’autorisation INTERNET dans le fichier 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 Ssortingng NAMESPACE = "https://api.authorize.net/soap/v1/"; private static final Ssortingng URL ="https://apitest.authorize.net/soap/v1/Service.asmx?wsdl"; private static final Ssortingng SOAP_ACTION = "https://api.authorize.net/soap/v1/AuthenticateTest"; private static final Ssortingng 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.toSsortingng()); System.out.println("Response::"+resultsRequestSOAP.toSsortingng()); } catch (Exception e) { System.out.println("Error"+e); } } } 

    J’ai eu mon rendez-vous avec KSOAP; J’ai choisi une approche plutôt simple.

    Étant donné un fichier WSDL, créez des modèles de demande SOAP pour chaque demande (par exemple: en utilisant l’interface utilisateur SOAP), puis remplacez les valeurs à transmettre dans le code. POST ces données au sharepoint terminaison du service en utilisant l’instance DefaultHttpClient et obtenez le stream de réponse. Analyser le stream de réponse à l’aide d’un parsingur XML Pull.

    Vous pouvez regarder WSClient ++

    J’ai créé un nouveau client SOAP pour la plate-forme Android. Il utilise une interface générée par JAX-WS, mais il ne s’agit que d’une preuve de concept jusqu’à présent.

    Si vous êtes intéressé, essayez l’exemple et / ou regardez la source sur AndroidSOAP .

    Si vous le pouvez, optez pour JSON. Android est livré avec le package org.json complet

    Appelez les méthodes ksoap2 . Cela fonctionne très bien.

    Configurez les détails, comme

     private static Ssortingng mNAMESPACE=null; private static Ssortingng 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); 

    et puis pour obtenir le résultat faire

     androidHttpTransport.call(SOAP_ACTION, envelope); result = (SoapPrimitive)envelope.getResponse(); 

    J’espère qu’appeler un service Web à partir d’Android aide.

    Je suis sûr que vous pourriez faire un petit client SOAP avec Axis . Instructions d’installation de l’axe .

    Il y a quelques mois, je travaillais avec le service Web de jax-ws dans l’application j2ee. Nous utilisions wsdl2java CXF pour générer le stub client WS à partir du fichier WSDL et avec ces stubs clients nous avons consommé les services Web. Il y a quelques semaines, lorsque j’essayais de consumr le service Web de la même manière sur une plate-forme Android, je ne pouvais pas, car le jar-androïde ne contenait pas toutes les classes de support “jax-ws”. Cette fois-ci, je n’ai trouvé aucun outil de ce type (si je n’ai pas réussi à le faire efficacement) pour répondre à mes exigences –

    • Récupère le stub client du WSDL.
    • Et appelez le service avec un argument (object de requête métier java).
    • Obtenez l’object métier de réponse.

    J’ai donc développé mon propre outil de génération de clients SOAP Android . Où vous devez suivre ces étapes:

    • Depuis WSDL Get WS Client Stub, placez-le dans votre projet.
    • Dites pour certains services “ComplexOperationService”, instanciez le service, obtenez le port de sharepoint terminaison et appelez la méthode de service, et obtenez la réponse du service Web:

    par exemple:

     ComplexOperationService service = new ComplexOperationService( ); ComplexOperation port= service.getComplexOperationPort(); SomeComplexRequest request = --Get some complex request----; SomeComplexResp resp = port.operate( request ); 
    • Vous n’avez pas besoin de vous soucier des classes de classe de service / req / response ou de toute autre classe et de la méthode, comme vous le savez, elles sont toutes générées à partir de WSDL.
    • Et bien sûr, vous n’avez pas besoin de connaître l’action / enveloppe / espace de nommage du soap, etc. Appelez simplement la méthode comme nous, les développeurs, le faisons tout le temps.

    Je pense que le service Web SOAP Web de l’application Android vous aidera beaucoup.

    Suivez ces étapes par la méthode SOAP

    À partir du fichier WSDL,

    • créer des modèles de demande SOAP pour chaque demande.

    • Remplacez ensuite les valeurs à transmettre dans le code.

    • POST ces données au sharepoint terminaison du service à l’aide de l’instance DefaultHttpClient.

    • Obtenez le stream de réponse et enfin

    • Analyser le stream de réponse à l’aide d’un parsingur XML Pull.

    Si vous pouvez utiliser JSON, il existe un livre blanc, une vidéo et le fichier sample.code dans Développer des services d’application avec les serveurs PHP et les clients de téléphone Android .

    Pour moi, le plus simple est d’utiliser un bon outil pour générer toutes les classes requirejses. Personnellement j’utilise ce site:

    http://easywsdl.com/

    Il supporte des services Web assez complexes et utilise ksoap2.

    Je suggère de vérifier un outil très utile qui m’a beaucoup aidé. Les gars qui s’occupent de ce projet ont également été très utiles. http://www.wsdl2code.com/

    Si vous rencontrez des problèmes pour appeler le service Web dans Android, vous pouvez utiliser le code ci-dessous pour appeler le service Web et obtenir une réponse. Assurez-vous que votre service Web renvoie la réponse dans le format de la table de données. Ce code vous aidera si vous utilisez des données de la firebase database SQL Server . Si vous utilisez MYSQL, vous devez changer une chose, remplacez simplement le mot NewDataSet de la phrase obj2=(SoapObject) obj1.getProperty("NewDataSet"); par DocumentElement

     void callWebService(){ private static final Ssortingng NAMESPACE = "http://tempuri.org/"; // for wsdl it may be package name ie http://package_name private static final Ssortingng URL = "http://localhost/sample/services/MyService?wsdl"; // you can use IP address instead of localhost private static final Ssortingng METHOD_NAME = "Function_Name"; private static final Ssortingng 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 } } 

    Si vous avez des problèmes à ce sujet, vous pouvez m'écrire.

    Ceci est un exemple de consommation de services Web SOAP dans Android.

    ** Note :: *** N’OUBLIEZ PAS D’AJOUTER ksoap2.jar dans votre projet et ajoutez également la permission INTERNET dans le fichier AndroidManifest *

     public final Ssortingng WSDL_TARGET_NAMESPACE = "http://tempuri.org/"; public final Ssortingng METHOD_NAME = "FahrenheitToCelsius"; public final Ssortingng PROPERTY_NAME = "Fahrenheit"; public final Ssortingng SOAP_ACTION = "http://tempuri.org/FahrenheitToCelsius"; public final Ssortingng SOAP_ADDRESS = "http://www.w3schools.com/webservices/tempconvert.asmx"; private class TestAsynk extends AsyncTask { @Override protected void onPostExecute(Ssortingng result) { super.onPostExecute(result); Toast.makeText(getApplicationContext(), Ssortingng.format("%.2f", Float.parseFloat(result)), Toast.LENGTH_SHORT).show(); } @Override protected Ssortingng doInBackground(Ssortingng... 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.toSsortingng()); } catch (Exception e) { e.printStackTrace(); } return response.toSsortingng(); } } 

    Veuillez télécharger et append le fichier de bibliothèque SOAP avec votre projet Nom de fichier: ksoap2-android-assembly-3.4.0-jar-with-dependencies

    Nettoyez l’application puis lancez le programme

    Voici le code pour l’appel de service SOAP

      Ssortingng SOAP_ACTION = "YOUR_ACTION_NAME"; Ssortingng METHOD_NAME = "YOUR_METHOD_NAME"; Ssortingng NAMESPACE = "YOUR_NAME_SPACE"; Ssortingng URL = "YOUR_URL"; SoapPrimitive resultSsortingng = 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); resultSsortingng = (SoapPrimitive) soapEnvelope.getResponse(); Log.i("SOAP Result", "Result Celsius: " + resultSsortingng); } catch (Exception ex) { Log.e("SOAP Result", "Error: " + ex.getMessage()); } if(resultSsortingng != null) { return resultSsortingng.toSsortingng(); } else{ return "error"; } 

    Les résultats peuvent être JSONObject ou JSONArray ou Ssortingng

    Pour votre meilleure référence, https://sortingnitytuts.com/load-data-from-soap-web-service-in-android-application/

    Merci.

    Pour appeler un service Web SOAP depuis Android, essayez d’utiliser ce client

    N’OUBLIEZ PAS D’AJOUTER ksoap2-android.jar dans votre chemin de compilation java

     public class WsClient { private static final Ssortingng SOAP_ACTION = "sum"; private static final Ssortingng OPERATION_NAME = "sum"; private static final Ssortingng WSDL_TARGET_NAMESPACE = "http://example.ws"; private static final Ssortingng SOAP_ADDRESS = "http://192.168.1.2:8080/axis2/services/Calculasortingce?wsdl"; public Ssortingng caclculerSomme() { Ssortingng 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); Ssortingng result = envelope.getResponse().toSsortingng(); res = result; System.out.println("############# resull is :" + result); } catch (Exception exception) { System.out.println("########### ERRER" + exception.getMessage()); } return res; } } 

    Vous pouvez effectuer un appel en tant que post sur http avec certains en-têtes. J’ai résolu cette question sans bibliothèques supplémentaires comme ksoap2

     private static HashMap 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= "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " \n" + ""; SsortingngBuffer chaine = new SsortingngBuffer(""); HttpURLConnection connection = null; try { URL url = new URL(ssortingngUrlShipments); connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("Content-Length", xmlssortingng.getBytes().length + ""); connection.setRequestProperty("SOAPAction", "http://35.15.85.55:8080/ServiceTransfer/GetAllOrdersOfShipment"); for(Map.Entry entry : mHeaders.entrySet()) { Ssortingng key = entry.getKey(); Ssortingng value = entry.getValue(); connection.setRequestProperty(key,value); } connection.setRequestMethod("POST"); connection.setDoInput(true); OutputStream outputStream = connection.getOutputStream(); outputStream.write(xmlssortingng.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; } 

    Ajouter Soap ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar ( ksoap2-android-assembly-3.2.0-jar-with-dependencies.jar ):

    Chaîne statique publique Fn_Confirm_CollectMoney_Approval (

      HashMap < String, String > str1, HashMap < String, String > str2, HashMap < String, String > str3) { Object response = null; Ssortingng METHOD_NAME = "CollectMoney"; Ssortingng NAMESPACE = "http://xxx/yyy/xxx"; Ssortingng URL = "http://www.w3schools.com/webservices/tempconvert.asmx"; Ssortingng 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(); Ssortingng keyValue = (Ssortingng) mapEntry.getKey(); Ssortingng value = (Ssortingng) 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 Ssortingng keyValue = (Ssortingng) mapEntry.getKey(); // getValue method returns corresponding key's value Ssortingng value = (Ssortingng) 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 Ssortingng keyValue = (Ssortingng) mapEntry.getKey(); // getValue method returns corresponding key's value Ssortingng value = (Ssortingng) 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(); Ssortingng MsgId = subObject_Resp.getProperty("MsgId").toSsortingng(); modelObject.setMsgId(MsgId); Ssortingng OrgId = subObject_Resp.getProperty("OrgId").toSsortingng(); modelObject.setOrgId(OrgId); Ssortingng ResCode = subObject_Resp.getProperty("ResCode").toSsortingng(); modelObject.setResCode(ResCode); Ssortingng ResDesc = subObject_Resp.getProperty("ResDesc").toSsortingng(); modelObject.setResDesc(ResDesc); Ssortingng TimeStamp = subObject_Resp.getProperty("TimeStamp") .toSsortingng(); modelObject.setTimestamp(ResDesc); return response.toSsortingng(); } catch (Exception ex) { ex.printStackTrace(); return null; } }