Java: простой клиент SOAP - PullRequest
       7

Java: простой клиент SOAP

11 голосов
/ 12 августа 2010

Я ищу SOAP-клиент для Java.

Мне кажется, что Apache Axis очень раздутый. Я не понимаю, почему в Java все так сложно. Например, в PHP все, что мне нужно сделать, это:

<?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);
?>

И мой объект $ response содержит всю необходимую мне информацию.

Кто-нибудь может подсказать, как бы я реализовал что-то подобное в Java без особых хлопот?

Заранее большое спасибо,

~ Редактировать 1 ~

@ jarnbjo:

Это очень полезно для меня. Я застрял в том, какой импорт мне нужен для запуска этого кода?

Я выполнил эту команду: sh wsdl2java.sh -o вывод -a -uri https://api.betfair.com/global/v3/BFGlobalService.wsdl

И построил вывод. Как вы думаете, это быстрее, чем PHP? Кроме того, у меня есть «асинхронный» вариант. Означает ли это, что я могу делать асинхронные вызовы? Это было бы очень полезно. Я хотел бы запустить все это на сервере веб-сокетов на основе Java.

Ответы [ 5 ]

13 голосов
/ 12 августа 2010

Если вам не требуются дополнительные функции, не предоставляемые клиентом SOAP в стандартном Java API, вы можете использовать инструмент wsimport в каталоге bin JDK (укажите его на свой URL WSDL) и позволить ему генерировать классы Java для фасада службы.

Сгенерированные классы, вам нужно больше Java-кода, чем в вашем примере PHP, чтобы выполнить запрос, но все же разумно:

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);

Этот пример завершается с ошибкой, но, возможно, из-за того, что токен сеанса недействителен.

2 голосов
/ 04 августа 2011

Установите флажок «Отправить или опубликовать SOAP-сообщение с использованием SAAJ (document / literal)» ... Он позволяет отправлять и получать XML через SOAP и напрямую манипулировать содержимым конверта SOAP без какого-либо анализа и интерпретации / привязки к объектам Java, например, когда вы используете wsimport ...

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

Привет

2 голосов
/ 12 августа 2010

Я повторю CXF, но с примером того, как его использовать.Однако это предполагает, что вы запустили инструмент CXF / JAXWS для генерации кода Java на основе wsdl.

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

Код для написания не очень сложен.Сложнее всего понять, как сгенерировать необходимый код Java из wsdl.Это не сложно, просто вы должны получить правильное заклинание командной строки.

2 голосов
/ 12 августа 2010

Java имеет статическую типизацию. Это означает, что компилятору необходимо знать любой метод, прежде чем вы сможете вызывать его непосредственно в исходном коде. Это, в свою очередь, означает, что вам нужны заглушки классов Java, описывающие веб-сервис, поэтому вам есть что вызвать. Обычно есть утилита со стеком веб-сервисов, которая делает именно это.

Вам может показаться интересным этот вопрос Какие существуют методы для автоматического создания заглушек Java-клиентов из файлов WSDL?

0 голосов
/ 12 августа 2010

Взгляните на CXF

...