IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Manipulation du reponse SOAP avec android


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2013
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 12
    Par défaut Manipulation du reponse SOAP avec android
    Bonjour,
    je suis entrain de develloper une application android qui fait appel à une methode disponible via un web service en utilisant le protocole SOAP .
    la reponse SOAP présente plusieurs objets et chaque objet contient plusieurs attributs comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
        <SOAP-ENV:Header/>
        <S:Body>
            <ns2:trouverAvecDateMResponse xmlns:ns2="http://medecin/">
                <return>
                     <bureau>7</bureau>
                    <idMedecin>24</idMedecin>
                    <motDePasse>aaaa</motDePasse>
                    <nom>benslimen</nom>
                    <prenom>ahmed</prenom>
                    <service>aaaaa</service>
                    <specialite>esthétique</specialite>
                </return>
                <return> 
                     <bureau>7</bureau>
                    <idMedecin>24</idMedecin>
                    <motDePasse>aaaa</motDePasse>
                    <nom>benslimen</nom>
                    <prenom>ahmed</prenom>
                    <service>aaaaa</service>
                    <specialite>esthétique</specialite>
                </return>
                <return>
                    <bureau>7</bureau>
                    <idMedecin>51</idMedecin>
                    <motDePasse>aaaa</motDePasse>
                    <nom>mourad</nom>
                    <prenom>dhib</prenom>
                    <service>odhra</service>
                    <specialite>esthétique</specialite>
                </return>
            </ns2:trouverAvecDateMResponse>
        </S:Body>
    </S:Envelope>
    mon probléme : j'ai pas trouvé comment recuperer chaque attribut de chaque medecin

    et voici le code java que j'ai utilisé:
    JavaWSActivity.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    package com.android;
     
    import android.app.Activity;
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ProgressBar;
    import android.widget.TextView;
     
    public class JavaWSActivity extends Activity {
     
    	Button b;
    	TextView tv;
    	EditText et;
    	EditText et1;
    	ProgressBar pg;
    	String arg0;
    	String arg1;
    	String displayText;
    	Object[] retourTab = null;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            //Name Text control
            et = (EditText) findViewById(R.id.editText1);
            et1=(EditText) findViewById(R.id.editText2);
            //Display Text control
            tv = (TextView) findViewById(R.id.tv_result);
            //Button to trigger web service invocation
            b = (Button) findViewById(R.id.button1);
            //Display progress bar until web service invocation completes
            pg = (ProgressBar) findViewById(R.id.progressBar1);
            //Button Click Listener
            b.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    //Check if Name text control is not empty
                    if (et.getText().length() != 0 && et.getText().toString() != "") {
                        //Get the text control value
                    	arg0 = et.getText().toString();
     
                    	arg1 = et1.getText().toString();
                    	//Create instance for AsyncCallWS
                    	AsyncCallWS task = new AsyncCallWS();
                        //Call execute 
                        task.execute();
                    //If text control is empty
                    } else {
                        tv.setText("Please enter name");
                    }
     
                }
            });
        }
     
     
        private class AsyncCallWS extends AsyncTask<String, Void, Void> {
    		@Override
    		protected Void doInBackground(String... params) {
    			retourTab =(Object[]) WebService.prendreRdvWS(arg0,arg1,"trouverAvecDateM");
    			return null;
    		}
     
    		@Override
    		protected void onPostExecute(Void result) {
     
    			tv.setText(retourTab[2].toString());
    			pg.setVisibility(View.INVISIBLE);
    		}
     
    		@Override
    		protected void onPreExecute() {
    			pg.setVisibility(View.VISIBLE);
    		}
     
    		@Override
    		protected void onProgressUpdate(Void... values) {
    		}
     
    	}
     
    }
    et WebService.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    package com.android;
     
    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;
     
     
    public class WebService {
    	//Namespace of the Webservice - can be found in WSDL
    	private static String NAMESPACE = "http://medecin/";
    	//Webservice URL - WSDL File location	
    	private static String URL = "http://10.0.2.2:8080/WebApplication5/medecinsws?WSDL";
    	//SOAP Action URI again Namespace + Web method name
    	private static String SOAP_ACTION = "http://medecin/";
    	public static Object[] retourTab = null;
     
    	public static  Object[] prendreRdvWS(String arg0, String arg1,String webMethName) {
    		String resTxt = null;
    		// Create request
    		SoapObject request = new SoapObject(NAMESPACE, webMethName);
     
     
     
    		// Add the property to request object*/
    		request.addProperty("jour",arg0);
    		request.addProperty("specialite",arg1);
     
     
    		// Create envelope
    		SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    				SoapEnvelope.VER11);
    		// Set output SOAP object
    		envelope.setOutputSoapObject(request);
    		// Create HTTP call object
    		HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
     
    		try {
    			// Invoke web service
    			androidHttpTransport.call(SOAP_ACTION+webMethName, envelope);
    			// Get the response
    			SoapObject response = (SoapObject) envelope.bodyIn;
     
     
    			int nbr=0;
    			if(response != null){
    	               nbr = response.getPropertyCount();
     
    	                  retourTab = new Object[nbr];
     
    	                  for(int i=0; i<nbr; i++){
     
    	                      retourTab[i] = response.getProperty(i);
    	                  }
    	              }
     
    		} catch (Exception e) {
    			//Print error
     
    			 System.out.println(e.getMessage());
     
    		} 
     
    		return retourTab;
    	}
    }

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 16
    Par défaut
    Bonjour,

    J'ai du aussi faire appel à des services SOAP depuis Android en travaillant pour une boîte récemment. Et oui, Java c'est pas vraiment fait pour gérer du SOAP à la base. Je suis passer par les objets Java du W3C, DocumentBuilderFactory, DocumentBuilder, et surtout Document qui te permet beaucoup de choses :
    - récupérer un / une liste de noeud ( -> <machin attribut="...">...</machin>) par nom de tag, d'attribut...
    - de boucler sur les noeuds enfants d'un noeud (ie: NodeList)
    ...

    Bref, si tu connais d'avance la structure de ta réponse, passe par cette manipulation de document XML. Regarde ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document document = builder.parse(new ByteArrayInputStream(response.getBytes()));
    NodeList returnNodes = document.getElementsByTagName("return");
    Récupère ta réponse en String. En l'envoyant dans le document, tu te retrouves avec un objet XML parsé par l'objet Document. Tu peux du coup choper ta liste de nodes qui sont des isntances de node "return". Tu n'as plus qu'a :
    - boucler sur chacun des node "return" pour construire ta liste de médecin
    - choper chacun des sous nodes des node "return" en faisant un truc du genre : returnNodes.item(0).getChildNodes().item(0) ( -> te renverra le node <bureau>7</bureau> ) => tu utilises la fonction getTextContent() sur le node, finis.

    Cordialement.

Discussions similaires

  1. Utiliser SOAP avec ASP ?
    Par darkian dans le forum ASP
    Réponses: 1
    Dernier message: 21/07/2006, 13h45
  2. comment manipuler Firebird 1.5 avec delphi 2005 personnel
    Par gregoire.beaugnier dans le forum Bases de données
    Réponses: 1
    Dernier message: 22/03/2006, 11h38
  3. [Axis] Utilisation d'un service soap avec Axis.
    Par avalone dans le forum Services Web
    Réponses: 3
    Dernier message: 14/02/2006, 15h17
  4. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14
  5. Exemple d'utilisation de SOAP avec C++
    Par jlassira dans le forum Bibliothèques
    Réponses: 5
    Dernier message: 04/01/2006, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo