2010-09-08 5 views
7

Je suis nouveau sur les services Web en général. J'essaie d'écrire un client autonome Java qui peut obtenir une réponse d'un service web.client WebService Java autonome

J'ai essayé de chercher SO et Google mais maintenant je suis devenu plus confus. Les suivants sont les liens que j'ai parcourus de manière approfondie.

J'ai une URL comme: http://api.something.com/remote/wsdl/SomeEncryptedText

J'ai aussi une demande SOAP quelque chose comme:

<?xml version="1.0" encoding="utf-8"?> 
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope"> 
<soap12:Body> 
<AuthUsername>[email protected]</AuthUsername> 
<AuthPassword>mypassword</AuthPassword> 
<Sid>12121</Sid> 
<DynamicProductFeedsRequest xmlns="http://api.something.com/remote/SomeEncryptedText"> 
</DynamicProductFeedsRequest> 
</soap12:Body> 
</soap12:Envelope> 

Avec ce comment puis-je écrire un client Java autonome que je voudrais intégrer une application Web à un stade ultérieur? Parmi les ressources mentionnées précédemment, il y a un large choix de logiciels: SoapUI, WSDL2Java, Axe Apache, Plugin Maven, JAX-WS, Apache CXF.

J'utilisé http://www.soapclient.com/soaptest.html dans l'une des réponses SO mentionnées ci-dessus et je suis en mesure d'obtenir un fichier html/xml parfait sur le navigateur.

Maintenant, je suis confus sur quel est le logiciel que je devrais utiliser? Les informations dans les liens sont peu en morceaux dont je suis incapable de corréler les uns avec les autres puisque je ne sais rien dans la SOA.

Quelqu'un peut-il me dire les étapes de haut niveau dans l'écriture d'un client Java autonome qui prend en charge l'URL WSDL et la requête SOAP et m'en donne la sortie?

S'il vous plaît laissez-moi savoir si j'ai manqué des informations.

+0

Utilisez CXF et suivez toutes les étapes dans ce lien http://cxf.apache.org/docs/developing-a-consumer.html – JoseK

Répondre

10

Cette question, tout dépend de ce qui suit:

  • La version JDK de votre compilateur Java.
  • Votre version WSDL (il existe 1.0, 1.2 et 2.0).

Fondamentalement, si vous utilisez Java annotations pour générer des services Web, vous aurez besoin de Java 5 connexes Services Web bibliothèques (qui prend en charge les annotations).

Quelques articles sur l'utilisation de Java Web Services avec annotations (JAX-WS):

Je vais commencer à partir de la génération client de service Web avec Java doesn 't annotations de support. Le client bien connu qui génère WSDL vers Java est Apache Axis (la dernière version est la 1.4 publiée le 22 avril 2006). Cela prend essentiellement une définition WSDL et la génère de nouveau au client. Il prend en charge l'ancienne version de WSDL (1.0) et se bloque si vous utilisez les versions plus récentes de WSDL (1.2 et 2.0). Qu'est-ce que cela fait essentiellement, il prend votre WSDL et génère un proxy Java qui communique à votre service Web. Il peut permettre une communication basée sur RPC ainsi que sur XML.

Pour Java qui prend en charge des annotations, il y a, effectivement, 2 façons de le faire:

  • Utilisation propre commande wsimport Java (le fichier exécutable se trouve dans le dossier JDK_HOME/bin/).
  • Utilisation de bibliothèques tierces telles que Apache Axis 2 (qui remplace efficacement Apache Axis et prend en charge WSDL version 2.0) ou Apache CXF (qui prend en charge WSDL jusqu'à 1,2).

Pour utiliser wsimport, vous avez besoin essentiellement d'aller à une commande shell (ou écrire un script) et faire efficacement quelque chose de cet effet:

wsimport -d [outputdir] wsdl_file 

et votre proxy Java se trouve dans le [outputdir] dossier.

wsimport est trouvé dans JDK 1.6 (je ne sais pas s'il existe dans les versions antérieures). Plus source here, et here.

Pour Apache Axis, Apache Axis 2 ou Apache CXF, il existe un fichier de classe WSDL2Java qui génère le code source.

Voici un guide sur la façon d'utiliser WSDL2Java dans Apache CXF et dans Apache Axis 2.

J'espère que cela vous aidera d'une certaine manière autant que j'ai dépensé comme 30 minutes de travail en faisant cela. :-)

+0

Salut, Merci beaucoup. Juste dans l'ordre j'explore la solution de JoseK. J'ai eu le problème avec WSDL2Java qui m'a donné l'erreur ci-dessous; > Erreur WSDLToJava: Les fichiers wsdls Rpc/codés ne sont pas pris en charge par CXF Correction d'une solution à partir de SO. J'ai fondamentalement supprimé l'encodage et maintenant généré deux fichiers 1. RemoteModelDynamicProductFeedsPort.java et 2. RemoteModelDynamicProductFeedsService.java. Besoin de procéder avec des étapes dans le lien. Je vais aussi essayer le message "The Elite Gentleman's" quand il est coincé. Merci! C'était en détail. – oneworld

+2

@Gentleman, appelez-le simplement en documentant les pratiques existantes et en les sauvegardant à un emplacement hors site, et votre patron vous demandera de le faire à nouveau. –

+0

J'ai utilisé le tutoriel CFX a trois fichiers générés comme ci-dessous: RemoteModelDynamicProductFeedsPort.java RemoteModelDynamicProductFeedsPort_RemoteModelDynamicProductFeedsPort_Client.java RemoteModelDynamicProductFeedsService.java Et puis émis: wsdl2java -ant -client -d D: \ experiementals \ webservice-java \ apache-CxF -2.2.10 \ bin -b async_binding.xml wsdlfile.wsdl Rien ne se passe. Je pensais avoir généré les stubs et avoir également passé la requête SOAP. Vous avez des commentaires à ce sujet? Fondamentalement, le tutoriel traite des choses complexes. Est-ce parce que j'ai enlevé le cryptage, ça ne fait rien? – oneworld

Questions connexes