web-dev-qa-db-fra.com

Générer Java à partir de WSDL pour une utilisation sur Android avec ksoap2-Android SOAP client?

Je dois accéder à un SOAP webservice existant à partir d'une Android. J'ai reçu des fichiers WSDL décrivant le webservice. Lire certains autres réponses) ici sur SO , il semble ksoap2-Android est la voie à suivre, en ce qui concerne le client SOAP à utiliser.

Le problème suivant est alors de savoir comment générer les classes Java nécessaires à partir des fichiers WSDL, et c'est là que je suis à court. Pour autant que je puisse voir, il existe les options suivantes:

  1. générateur de code AXIS2
  2. WSDL2ksoap
  3. outil waximport JAX-WS

J'ai d'abord essayé # 1, avec le plugin AXIS2 Eclipse pour le générateur wsdl2code. L'assistant a réussi à générer beaucoup de code Java, mais il a également changé mon projet Android en une sorte de projet de service Web, et je n'ai jamais pu obtenir tout ce qui a été généré pour la compilation, et encore moins pour travailler avec ksoap2-Android. Quelqu'un a-t-il réussi avec ça?

Je ne suis pas en mesure d'exécuter wsdl2ksoap avec succès, car il semble nécessiter un service Web en cours d'exécution et tout ce que j'ai à l'heure actuelle, ce sont les fichiers WSDL. De même, à la lecture de la page Web, il semble que ce soit un projet à ses débuts et pas vraiment prêt pour les heures de grande écoute.

JAX-WS wsimport Je n'ai pas encore eu l'occasion d'essayer. Cependant, je ne sais pas si ce qu'il génère fonctionnera avec ksoap2-android?

Question: Comment puis-je générer des fichiers Java à partir de fichiers WSDL, pour une utilisation sur Android avec ksoap2-Android SOAP bibliothèque cliente?

Merci beaucoup d'avance.

(PS: Oui, le choix est SOAP, il n'est pas optimal pour Android use, mais je ne peux pas changer cela.)

33

Ma conclusion après pas mal de recherches est qu'il n'y a malheureusement pas d'outil (mature) de ce type. Ni AXIS2 ni JAX-WS ne fonctionneront sur Android, et WSDL2ksoap est tout simplement trop immature pour une utilisation réelle.

Cependant, il existe un outil propriétaire appelé wsclient ++ qui fera très bien le travail. (Lisez la mise à jour ci-dessous, lorsqu'elle est réellement utilisée, elle ne tient pas du tout la distance.) Elle n'utilise pas la bibliothèque cliente ksoap2-Android, elle a la sienne.

La bibliothèque client est un peu grossière car elle dépend fortement du transport http, ce qui rend les tests (unitaires) un peu compliqués. Mais il peut être modifié assez facilement pour permettre DI, car la source est disponible dans le fichier jar distribué.

Le générateur wsdl vers Java fonctionne cependant parfaitement et nous fera gagner beaucoup de temps.

Mise à jour Après avoir travaillé avec wsclient++ Pendant un certain temps, il est clair que les classes générées sont vraiment grossières et ne gèrent pas les cas d'erreur à tout. (Chaque méthode déclare throws Exception).

Nous n'utilisons plus wsclient ++, et je ne recommanderais à personne de l'utiliser! Nous n'avons malheureusement pas vraiment trouvé d'alternative fonctionnelle. : /

À la fin, nous avons converti nos fichiers WSDL à l'aide d'AXIS2, puis avons écrit un tas de scripts personnalisés pour supprimer et transformer les fichiers Java générés en quelque chose qui s'appuiera sur Android à l'aide de la bibliothèque ksoap2-Android. Très hackish, et nécessite des tonnes de travail manuel pour fonctionner. Malheureusement. Si vous trouvez une meilleure solution, ou si une solution se présente, veuillez fournir une nouvelle réponse.

10
Bjarke Freund-Hansen

J'ai trouvé cet outil pour générer automatiquement wsdl en Android,

http://www.wsdl2code.com/example.aspx

Voici le code:

public void callWebService()    {
    SampleService srv1 = new SampleService();
    Request req = new Request();
    req.companyId = "1";
    req.userName = "userName";
    req.password = "pas";
    Response response =  srv1.ServiceSample(req);
}
14
Bennya

J'ai eu une situation similaire (je n'avais que le fichier wsdl sans service Web fonctionnel). J'ai utilisé

http://easywsdl.com/

pour générer des classes pour Android sans aucun problème. Cet outil utilise la bibliothèque ksoap. La grande chose avec cet outil est qu'il prend en charge les extensions WCF et les types comme le contrat de données avec l'attribut IsReference ou Guid.

11
robocik

J'ai également utilisé pour iPhone certaines classes générées automatiquement que je voulais voir ici aussi.

wsdl2code est l'un de ce que j'ai utilisé sur iPhone. Donnez une URL avec le fichier wsdl, vous obtiendrez quelques classes à télécharger. Pour moi, la partie la plus difficile a été de télécharger les pièces requises. Il a fallu plus de 2 minutes de recherche :) ksoap2-Android-Assembly-3.0.0-jar-with-dependencies.jar nécessaire pour télécharger le glisser-déposer des annonces sur ADT (Eclipse). C'est super facile, surtout si vous avez utilisé l'homologue sur iPhone. - un outil similaire que j'ai utilisé.

Cependant, dans mon cas, je ne suis pas du tout satisfait de la solution, car je vois que j'utilise un canon, un ensemble de canons pour tirer sur un moineau. Dans mon cas, il faut utiliser un HTTP Post et ne pas inclure les dépendances des autres bibliothèques.

Pour être honnête, je ne me soucie pas trop, car une fois que le côté serveur pense que nous avons une puissance de batterie illimitée et un plan de données illimité, je ferme les yeux et je ne me soucie pas des frais généraux de marshaling-unmarshaling, qui utilisent le CPU (batterie ) augmenter les données transmises sur le réseau.

Dans le pire des cas, ce devrait être un JSON + HTTP POST not SOAP for mobiles ...

Je suggérerais de parler aux gars côté serveur et d'expliquer pour eux pourquoi ce ne sera pas bon s'ils font 2 clics sur les assistants et nous faisons d'autres clics sur les formulaires pour obtenir le code généré. Au moins alors que l'application n'est pas énorme, même si cela devrait être le budget pour optimiser pour le mobile quelques implémentations d'interfaces.

1
user529543

Un peu tard, mais un générateur de stubs ksoap2 est en cours de développement, et je l'ai utilisé avec succès pour créer les stubs.

http://ksoap2-stub-gen.sourceforge.net/

Quelqu'un l'a également rendu disponible en tant que service en ligne (c'est-à-dire que vous donnez l'URL de votre WSDL et le service renverra un fichier Zip contenant les talons).

http://www.davidgouveia.net/2011/04/online-stub-generator-for-Android-applications-using-ksoap2/

0

J'utilise l'outil Apache CXF juste pour créer dto, et j'ai écrit une classe pour effectuer un démarshalling de base basé sur le nom des éléments

0
zime