Я ищу клиент 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 сервер.
Если вам не требуются дополнительные функции, не предоставляемые клиентом 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);
Этот пример завершается ошибкой, но, вероятно, потому, что токен сеанса недействителен.
Java имеет статическую типизацию, что означает, что компилятор должен знать любой метод, прежде чем вы сможете вызывать его непосредственно в исходном коде. Это, в свою очередь, означает, что вам нужны заглушки классов Java, описывающие веб-службу, поэтому вам есть к чему обратиться. Обычно существует утилита со стеком веб-сервисов, выполняющая именно это.
Этот вопрос может показаться вам интересным. Какие существуют методы для автоматического создания заглушек клиента Java из файлов WSDL?
Я повторю 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. Это не сложно, просто вам нужно получить правильное заклинание в командной строке.