Java:简单的SOAP客户端

我正在寻找Java的SOAP客户端。

Apache Axis对我来说看起来很臃肿。 我不明白为什么Java必须如此复杂。 例如,在PHP中,我所要做的就是:

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

我的$ response对象包含我需要的所有信息。

任何人都可以建议我如何在没有太多麻烦的情况下在Java中实现这样的东西?

提前谢谢了,

〜编辑1~

@jarnbjo:

这对我来说非常有用。 我坚持的一点是我需要输入什么来运行代码?

我运行了这个命令:sh wsdl2java.sh -o output -a -uri https://api.betfair.com/global/v3/BFGlobalService.wsdl

并建立了输出。 你觉得这比PHP快吗? 另外,我有一个“异步”选项。 这是否意味着我可以进行异步调用? 这将非常有用。 我想在基于Java的websocket服务器中运行所有这些。

除非您需要标准Java API中SOAP客户端未提供的其他function,否则可以在JDK的bin目录中使用wsimport工具(将其指向您的WSDL URL),并让它为服务外观生成Java类。

使用生成的类,您需要比PHP示例中更多的Java代码来执行请求,但它仍然是合理的:

 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服务堆栈的实用程序正是这样做的。

您可能会发现这个问题很有趣从WSDL文件自动生成Java客户端存根有哪些方法?

我会回应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

问候

看看CXF吧