web-dev-qa-db-fra.com

Consommer simplement un service Web en Java

J'ai un service Web SOAP SOAP très simple que je dois consommer à partir d'un client Java. Quelle est la façon la plus simple d'accomplir cela 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 ws.

35
Deano

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 appeler (vous n'avez pas besoin de créer Java stubs 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 de Java stub généré à partir de WSDL, à l'aide de wsdl2Java.

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

Pour # 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();
23
FoxyBOA

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

Voir ce qui suit:

22
anjanb

Si vous pouvez assouplir votre exigence "pas de bibliothèques tierces" et que vous avez un WSDL pour le service Web, alors Axis vous facilite la tâche. Compilez simplement le WSDL à l'aide de wsdl2Java et vous pouvez utiliser les classes Java Java générées pour consommer le service Web).

8
Dónal

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

Si vous ne pouvez pas aimer SAX, alors relâchez votre exigence de bibliothèque sans tiers et utilisez StAX (avec woodstox) à la place.

Cette approche pourrait être la "plus simple" (compte tenu de l'exigence de non-tiers-libs), mais je ne pense pas que ce sera facile.

1
Chris Vest