35 votes

Consommer simplement un service web en Java

J'ai un service web SOAP très simple que je dois consommer à partir d'un client Java. Quel est le moyen le plus simple d'y parvenir sans utiliser de bibliothèques tierces ? Une exigence est que l'hôte et le port soient lus à partir du web.xml avant chaque appel au service web.

23voto

FoxyBOA Points 3334

Je peux vous recommander la bibliothèque CXF. En l'utilisant, vous aurez plusieurs options pour appeler des services web :

  1. Utilisez proxy dynamique pour l'appel (il n'est pas nécessaire de faire des stubs Java en utilisant wsdl2java).

    DynamicClientFactory dcf = DynamicClientFactory.newInstance();
    Client client = dcf.createClient("http://admin:password@localhost:8080"+
                                     "/services/MyService?wsdl");
    Object[] a = client.invoke("test", "");
    System.out.println(a);
  2. Utilisation d'un stub Java généré à partir de WSDL, en utilisant wsdl2java.

  3. Si votre serveur a été créé en utilisant CXF, vous pouvez réutiliser directement le code de votre interface (au lieu d'utiliser wsdl2java sur le WSDL qui a été créé à partir de votre interface !)

Pour les numéros 2 et 3, le code suivant illustre l'utilisation de CXF :

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress("http://admin:password@localhost:8080/services/MyService");
factory.setServiceClass(ITest.class);
ITest client = (ITest) factory.create();
client.test();

22voto

anjanb Points 5579

Selon la version de JAVA que vous utilisez, une partie de JAX-WS est intégrée. Le JDK 6 possède l'implémentation standard de JAX-WS de Java et vous pouvez simplement l'utiliser.

Voir ce qui suit :

8voto

Dónal Points 61837

Si vous pouvez assouplir votre exigence de "pas de bibliothèques tierces" et que vous disposez d'un WSDL pour le service web, Axis vous facilite vraiment la tâche. Il suffit de compiler le WSDL à l'aide de wsdl2java, et vous pouvez utiliser les classes Java générées pour consommer le service Web.

1voto

Chris Vest Points 5622

Sans utiliser de bibliothèques tierces ? Apprenez à connaître parfaitement la norme SOAP et apprenez à aimer SAX.

Si vous ne pouvez pas aimer SAX, alors relâchez votre exigence de ne pas utiliser de librairies tierces et utilisez StAX (avec woodstox) à la place.

Cette approche pourrait être la plus "facile" (compte tenu de l'obligation de ne pas utiliser de librairies tierces), mais je ne pense pas qu'elle sera facile .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X