Java:简单SOAP客户端

Java:简单SOAP客户端,java,soap,wsdl,Java,Soap,Wsdl,我正在寻找一个用于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"=>

我正在寻找一个用于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编辑~

@雅恩乔:

这对我很有用。我的重点是,我需要什么样的导入才能让代码运行

我运行了以下命令: sh wsdl2java.sh-o输出-a-uri


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

看看Java是静态类型的,这意味着编译器需要知道任何方法,然后才能在源代码中直接调用它。这反过来意味着您需要Java类存根来描述web服务,因此您需要调用一些东西。通常有一个带有web服务堆栈的实用程序正是这样做的


您可能会发现这个问题很有趣

除非您需要标准Java API中SOAP客户端未提供的附加功能,否则您可以使用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);

此示例失败,但有一个错误,可能是因为会话令牌无效。

我将回显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


关于

嘿,我已经下载了,但我真的不知道从哪里开始。我只想给一个SOAP客户机对象我的wsdl url,向它发出一些请求并查看一些响应。当然,只需要几行Java就可以了?+1是指导入工具。这是我第一次听说thismaxlols>>我不明白为什么Java中的事情会如此复杂。