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

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

Ось Apache выглядит очень чрезмерно увеличенной в размерах мне. Я не понимаю, почему вещи должны быть так сложными в Java. Например, в PHP, все, что я должен сделать:


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

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

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

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

~Edit 1 ~

@jarnbjo:

Это очень полезно для меня. Бит, на котором я застреваю, - то, какой импорт я должен заставить тот код выполнять?

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

И созданный вывод. Вы думаете, что это более быстро, чем PHP? Кроме того, у меня есть "асинхронная" опция. Это означает, что я могу выполнить асинхронные вызовы? Это было бы очень полезно. Я хотел бы выполнить всю эту внутреннюю часть основанный на Java websocket сервер.

11
задан Eamorr 11 August 2010 в 22:53
поделиться

4 ответа

Если вам не требуются дополнительные функции, не предоставляемые клиентом SOAP в стандартном API Java, вы можете использовать инструмент 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);

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

13
ответ дан 3 December 2019 в 06:19
поделиться

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

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

2
ответ дан 3 December 2019 в 06:19
поделиться

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

0
ответ дан 3 December 2019 в 06:19
поделиться

Я повторю 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
ответ дан 3 December 2019 в 06:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: