Cette classe permet de récupérer une méthode distante de type tableau d'objet avec KSoap2. Après sept heures de recherches sur internet, on perçoit rapidement que l'utilité de cette API est remise en question, surtout que les téléphones mobiles n'offrent pas vraiment de bonne perspectives en la matière.
Source / Exemple :
package org.connexion;
import java.io.IOException;
import java.util.Vector;
import org.ksoap2.SoapFault;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransport;
/**
*
public class ConnexionSOAP {
public Object resultatRequeteSOAP = null;
public SoapObject retour = null;
public Object[] retourTab = null;
public SoapObject objetSOAP;
private HttpTransport connexionServeur = null;
private SoapSerializationEnvelope envelope = null ;
public HttpTransport getConnexionServeur() {
return connexionServeur;
}
// nom du service
private String nomService = "";
// url du service
private String urlService = "";
// méthode du service
private String methodeChoisie = "";
// constructeur soap
public ConnexionSOAP (String urlService){
this.urlService = urlService;
try{ // etape 1 création du module de connexion HTTP
this.connexionServeur = new HttpTransport ( this.urlService );
this.connexionServeur.debug = true;
}catch(Exception e){
e.printStackTrace ();
}
// return connexionServeur;
}
// se connecter au serveur et retourner l'instance
// public void connexionServeur(String urlService){}
// création de l'objet SOAP et retourner l'objet
public void objetSoap(String nomService, String methodeChoisie, Vector arg){
this.nomService = nomService;
this.methodeChoisie = methodeChoisie;
try{
//création objet SOAP
this.objetSOAP = new SoapObject (nomService, methodeChoisie );
//ajout des proprietés pour cette méthode
if(arg != null){
for(int i=0; i<arg.size(); i++)
this.objetSOAP.addProperty("arg"+i, arg.elementAt(i));
}
}catch(Exception e){
e.printStackTrace ();
}
// return objetSOAP;
}
public void envelope(){
try{
// création d'un objet qui contiendra nos propriétés
this.envelope = new SoapSerializationEnvelope(SoapSerializationEnvelope.VER11);
this.envelope.bodyOut = this.objetSOAP;
// création de l'objet SOAP ok
}catch(Exception e){
e.printStackTrace ();
}
//return this.envelope;
}
public SoapSerializationEnvelope getEnvelope() {
return envelope;
}
public Object resultatRequeteSOAP() {
// connexion au serveur
try
{
// invoquation de la méthode sur le serveur
this.connexionServeur.call(null, this.envelope);
// recuperation de la réponse du serveur
this.resultatRequeteSOAP = this.envelope.getResponse();
}catch (Exception aE)
{
aE.printStackTrace();
}
return this.resultatRequeteSOAP;
}
public Object[] resultatRequeteSOAPTabObject() {
int nbr = 0;
// connexion au serveur
try
{
// invoquation de la méthode sur le serveur
this.connexionServeur.call(null, this.envelope);
// recuperation de la réponse du serveur
this.retour = (SoapObject) this.envelope.bodyIn;
if(this.retour != null){
nbr = retour.getPropertyCount();
retourTab = new Object[nbr];
for(int i=0; i<nbr; i++){
retourTab[i] = retour.getProperty(i);
}
}
}catch (Exception aE)
{
aE.printStackTrace();
}
return this.retourTab;
}
}
public Vector resultatRequeteSOAPVectorObject() {
int nbr_niv_1 = 0;
int nbr_niv_2 = 0;
// connexion au serveur
try
{
// invoquation de la méthode sur le serveur
this.connexionServeur.call(null, this.envelope);
// recuperation de la réponse du serveur
this.retour = (SoapObject) this.envelope.bodyIn;
if(this.retour != null){
// récupérer le nombre de return
nbr_niv_1 = retour.getPropertyCount();
// exploiter le vecteur
vector = new Vector(nbr_niv_1);
for(int i=0; i<nbr_niv_1; i++){
// récupérer la première réponse dans un SoapObject
SoapObject obj = (SoapObject) retour.getProperty(i);
// récupérer le nombre d'item dans une variable nbr_niv_2 de type entier
nbr_niv_2 = obj.getPropertyCount();
// tableau contenant tout les items de la réponse i
Object[] item = new Object[nbr_niv_2];
for(int j=0; j<nbr_niv_2; j++){
// insérer chaque item dans un élément du tableau
item[j] = obj.getProperty(j);
}
// ajouter le tableau d'objets dans la liste vector
vector.addElement(item);
}
}
}catch (Exception aE)
{
aE.printStackTrace();
}
return this.vector;
}
/*
Appel de méthode ->
public ConnexionSOAP cs = new ConnexionSOAP("url_service");
v = new Vector(1);
v.addElement(new Integer(1));
cs.objetSoap("nom_service", "ma_methode", v);
cs.envelope();
Object[] tab = cs.resultatRequeteSOAPTabObject();
Vector v = cs.resultatRequeteSOAPVectorObject();
// ex[0] = (Object[]) v.elementAt(0);
// ex[1] = (Object[]) v.elementAt(1);
// ...
Conclusion :
Les ressources d'un téléphone mobile étant très limitées, il faut savoir improviser !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.