Aller au contenu

Et les Web Services avec tout ca ?


Jorodan

Recommended Posts

Salut les jeunes,

Je suis en stage en ce moment et je dois faire une application Android qui tappe sur le serveur de la boite par ses webservices.

Les contraintes sont les suivantes :

- c'est du SOAP

- il y a authentification obligatoire

Pour l'instant, j'ai étudié l'idée de KSOAP2-android, mais j'ai l'impression que ca ne gère pas l'authentification.

Sinon, l'idée sur laquelle je suis parti, c'est de passer par Axis2 d'apache.

Quelqu'un a déjà gérer cette problématique et aurait des idées pour m'orienter dans mes recherches ?

Merci,

Ju'

Lien vers le commentaire
Partager sur d’autres sites

  • 5 months later...

Alors oui j'ai des infos!

Je te propose de te donner ici les premières briques que j'ai trouvé. Passe moi un coup de fil si t'en veux plus.

Pendant mon stage, je me suis concentré sur le WS en SOAP. Java propose de gérer se protocole en natif grâce à une lib appache. En Java, tu peux générer les stub à partir des WSDL et utiliser ces stubs dans ton projet. Malheureusement, les stubs sont créés avec des classes réseaux Java qui n'ont pas été importées telles quel sous Android. Donc ca ne marche pas.

Autre option, utiliser une lib qui te lis les requètes pour les parser intelligemment et t'aider à fabriquer tes réponses. une bonne lib qui fait ca c'est K-SOAP. Malheureusement, ici aussi des problèmes de requtèes réseau.

Du coup un projet K-SOAP-ANDROID a pour objectif de porter K-SOAP. Mais pour l'instant c'est très sommaire. Ca a peut-être évolué depuis la dernière fois que j'ai regardé.

Pour finir REST et autre, pas cherché.

Au final, ben je faisais tout à la main. Si t'as du temps (un pléonasme pour un thésard :P), tu peux porter les lib appache de génération de stub pour qu'elles soient compatible Android.

Je suis sur que si t'es bon, tu pousses à l'équipe Android (oui oui c'est toujours open sources :)) et ca en jette sur le CV ;)

ps : T'es BRUNO! J'ai pas compris!

ps2 : Et JDR c'est secret...chut :P

Lien vers le commentaire
Partager sur d’autres sites

Ok merci mon grand ! Alors plusieurs points :

1 - Ouais, je pensais bien que les libs Java de base ne fonctionneraient pas vu que Android est "semi-ouvert". C'est comme les drivers sqlite pour JDBC, impossible à utiliser :(

2 - Je viens de voir aussi des choses sur REST qui, à première vue, a l'air tout aussi bien que du SOAP (c'est pas tout à fait comparable mais bon). J'ai trouvé un exemple d'utilisation ici : http://breaking-catch22.com/?p=127 Pas encore testé, mais je le fais tout de suite

3 - Hé Ho ! Chuis pô encore thésard, je suis en CDI en attendant la réponse de l'ANRT

4 - "T'es Bruno !" => demande toi qui joue dans Caméra café ;)

5 - Jeune Dément Révolté c'est secret ? ;)

Lien vers le commentaire
Partager sur d’autres sites

Pour ceux que çà intéresse et qui passent ici, voici un code court mais efficace qui permet d'envoyer une requête SOAP et de recevoir la réponse. A vous ensuite de la décortiquer. Ce code n'est pas de moi, copyright quelqu'un d'autre.

http://stackoverflow.com/questions/1934216/android-ws-services

N'oubliez pas, pour ceux qui ne savent pas, de rajouter la permission d'accès à internet pour votre application :


Modifié par Morphée
Lien vers le commentaire
Partager sur d’autres sites

1 - Ouais, je pensais bien que les libs Java de base ne fonctionneraient pas vu que Android est "semi-ouvert". C'est comme les drivers sqlite pour JDBC, impossible à utiliser :(

Rien à voir avec le degré d'ouverture d'Android qui est bien 100% Open Source (ce sont les Googles Apps qui ne le sont pas ;) )

Le problème de la non compatibilité vient de l'API réseau qui n'est plus standard du à sa réimplémentation pour prendre en compte les problèmes de l'Internet Mobile.

4 - "T'es Bruno !" => demande toi qui joue dans Caméra café wink

5 - Jeune Dément Révolté c'est secret ? wink

Lol et private lol ;)

Lien vers le commentaire
Partager sur d’autres sites

Semi-ouvert, je me comprend et tu me comprends, c'est juste que t'adore me contredire ;-)

Ce que je veux dire c'est que beaucoup des habitudes de programmation prises avec Java standard peuvent être abandonnées, soit pour des choses mieux gérées, soit pour d'autres réduites. Par exemple beaucoup d'API Java que j'avais l'habitude d'utiliser ne fonctionnent plus, et pas seulement pour le réseau. Après c'est sûr que çà leur a permit d'optimiser à fond la machine virtuelle, ce qui nous donne un Java plus puissant que Java.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

Je redonne vie à ce vieux post car de l'eau a coulé sous les ponts. Pour ceux qui passeraient pas là et chercheraient à savoir comment utiliser des services SOAP sur Android, j'ai fais un tuto sur le sujet disponible ici

J'espère que çà pourra servir !

Modifié par Morphée
Lien vers le commentaire
Partager sur d’autres sites

C'est bien les web services en soap mais j'arrive pas à vérifier que c'est bien avec mon web services php que je communique. Je me suis créer une pair de clef public, privée. La privée en pem et la public en DER. sur mon web service je signe mes messages en encodant avec la clef privée un nonce.

Je renvoie le tout à Android qui à la clef public en der. Je récupère bien le message soap. Ok tout va bien, j'init une publicKey et je vérifie la signature. Et là ca fonctionne pas.

je penche pour un problème utf8, utf16 ... mais je suis un peu largué là.

Voici le code Android java:

try
 {
  String[] property = {"nonce", "code"};
  String[] value = {"10000", "dddd-tttt"};

  Object soap = soapHelper.soap ("enterPromoCode", property, value); // Récupérer les quatre premiers éléments

  Tuto tut = new Tuto();
  //Integer.parseInt(soap.toString ());
  soapHelper.parseSoapObject(soap.toString (), tut);
  if(tut.Msg != null)
  {
   Signature sig;
	  try {
		  sig = Signature.getInstance("SHA1withRSA");
		  PublicKey publicKey = null;
		  try {
			  byte[] decodedKey = EoleJNILib.getFile("pubkey.der");
			  KeyFactory keyFactory = KeyFactory.getInstance("RSA");
			  publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(decodedKey));
		  } catch (NoSuchAlgorithmException e) {
			  throw new RuntimeException(e);
		  } catch (InvalidKeySpecException e) {
			  Log.e(TAG, "Invalid key specification.");
			  throw new IllegalArgumentException(e);
		  }

		  sig.initVerify(publicKey);
		  String str = String.valueOf(tut.Nonce);
		  byte[] utf8Bytes = str.getBytes("UTF8");
		  sig.update(utf8Bytes);
		  byte[] signUTF8Bytes = tut.Signature.getBytes("UTF8");
		  if (!sig.verify(signUTF8Bytes)) {
			  Log.e(TAG, "Signature verification failed.");
			  return;
		  }
		  // ok
		  this.showToastMsg(tut.Msg, 1);
	  } catch (NoSuchAlgorithmException e) {
		  Log.e(TAG, "NoSuchAlgorithmException.");
	  } catch (InvalidKeyException e) {
		  Log.e(TAG, "Invalid key specification.");
	  } catch (SignatureException e) {
		  Log.e(TAG, "Signature exception.");
	  }

  }
 }

 catch(Exception e)
 {
  String s = e.toString();
  this.showToastMsg(s, 1);
 }

Quelqu'un peu m'aider? merci

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...