Java:简单SOAP客户端
我正在寻找适用于Java的SOAP客户端。Java:简单SOAP客户端
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的websocket服务器中运行所有这些。
除非你要求不是由SOAP客户端的标准Java API中提供的附加功能,你可以使用JDK的bin目录(它指向你的WSDL URL wsimport工具),并让它为服务门面生成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是静态类型的,这意味着编译器需要知道的任何方法之前,你可以在源代码中直接调用它。这又意味着您需要描述Web服务的Java类存根,因此您可以调用某些东西。通常有一个Web服务栈的实用程序正在执行此操作。
您可能会发现这个问题有意思What methods exist to auto-generate java client stubs from WSDL files?
我会回应CXF,但以一个如何使用它为例。但是,这假定您已经运行CXF/JAXWS工具来基于wsdl生成Java代码。
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(TheGeneratedInterface.class);
factory.setAddress("hostUrlGoesHere");
client = (TheGeneratedInterface) factory.create();
return client.methodNameGoesHere(request);
要编写的代码并不难。更难的部分实际上是搞清楚如何从wsdl生成必要的Java代码。这并不难,只是你必须得到正确的命令行咒语。
选中“使用SAAJ(文档/文字)发送或发布SOAP消息”... 它使您能够通过SOAP发送和获取XML,并直接操作SOAP信封的内容,而无需任何解析和解释/绑定到java对象,如当你使用wsimport ...
http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm
问候
maxlols >>我不明白为什么事情都必须在Java中那么复杂。 – 2015-09-01 10:45:16