Java: Client SOAP Simple


Je cherche un client SOAP pour Java.

Apache Axis me semble très gonflé. Je ne comprends pas pourquoi les choses doivent être si compliquées en Java. Par exemple, en PHP, tout ce que j'ai à faire est:

<?php
$global_service_wsdl='https://api.betfair.com/global/v3/BFGlobalService.wsdl';
$betfair=new SoapClient($global_service_wsdl);

$params=array("request"=>
    array("header"=>
         array("clientStamp"=>0,"sessionToken"=>$session_token)),"locale"=>""
);
$response=$betfair->getAllEventTypes($params);
?>

Et mon objet response response contient toutes les informations dont j'ai besoin.

Quelqu'un peut-il suggérer comment implémenter quelque chose comme ça en Java sans trop de tracas?

Un grand merci d'avance,

~ Modifier 1~

@jarnbjo:

C'est très utile pour moi. Le bit sur lequel je suis coincé est de quelles importations ai-je besoin pour exécuter ce code?

J'ai exécuté cette commande: sh wsdl2java.sh -o sortie -un -uri https://api.betfair.com/global/v3/BFGlobalService.wsdl

Et construit la sortie. Pensez-vous que c'est plus rapide que PHP? En outre, j'ai une option "asynchrone". Cela signifie-t-il que je peux faire des appels asynchrones? Cela serait très utile. Je voudrais exécuter tout cela dans un serveur websocket basé sur Java.

Author: Eamorr, 2010-08-12

5 answers

Sauf si vous avez besoin de fonctionnalités supplémentaires non fournies par le client SOAP dans l'API Java standard, vous pouvez utiliser l'outil wsimport dans le répertoire bin du JDK (pointez-le vers votre URL WSDL) et laissez-le générer des classes Java pour la façade de service.

Avec les classes générées, vous avez besoin de plus de code Java que dans votre exemple PHP pour effectuer la requête, mais c'est toujours raisonnable:

BFGlobalService betfair = new BFGlobalService_Service().getBFGlobalService();

APIRequestHeader header = new APIRequestHeader();
header.setClientStamp(0);
header.setSessionToken("someSessionToken");

GetEventTypesReq req = new GetEventTypesReq();
req.setHeader(header);
req.setLocale("");

GetEventTypesResp response = betfair.getAllEventTypes(req);

Cet exemple échoue avec une erreur, mais probablement parce que le jeton de session est invalide.

 12
Author: jarnbjo, 2010-08-11 22:34:14

Java est typé statiquement, ce qui signifie que le compilateur doit connaître n'importe quelle méthode avant de pouvoir l'invoquer directement dans votre code source. Cela signifie à son tour que vous avez besoin de stubs de classe Java décrivant le service Web, vous avez donc quelque chose à appeler. Il existe généralement un utilitaire avec une pile de services Web faisant exactement cela.

Vous pourriez trouver cette question intéressante Quelles méthodes existent pour générer automatiquement des talons de client java à partir de fichiers WSDL?

 2
Author: Thorbjørn Ravn Andersen, 2017-05-23 12:09:11

Je vais faire écho à CXF, mais avec un exemple de comment l'utiliser. Cependant, cela suppose que vous avez exécuté l'outil CXF/JAXWS pour générer le code Java basé sur le wsdl.

JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass( TheGeneratedInterface.class );
factory.setAddress( "hostUrlGoesHere" );
client = (TheGeneratedInterface) factory.create();
return client.methodNameGoesHere( request );

Le code à écrire n'est pas terriblement difficile. La partie la plus difficile consiste à déterminer comment générer le code Java nécessaire à partir du wsdl. Ce n'est pas difficile, juste que vous devez obtenir la bonne incantation de ligne de commande.

 2
Author: Chris Kessel, 2010-08-11 22:54:35

Cochez "Envoyer ou publier un message SOAP en utilisant SAAJ (document/littéral)"... Il vous permet d'envoyer et d'obtenir du XML via SOAP et de manipuler le contenu de l'enveloppe SOAP directement sans analyse et interprétation/liaisons dans des objets java, par exemple lorsque vous utilisez wsimport...

Http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm

Cordialement

 2
Author: leroyse, 2011-08-04 10:01:19

Jetez un oeil à CXF

 0
Author: Maurice Perry, 2010-08-11 22:07:17