【问题标题】:Java: Simple SOAP ClientJava:简单的 SOAP 客户端
【发布时间】:2010-08-11 22:02:22
【问题描述】:

我正在寻找 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 服务器中运行所有这些。

【问题讨论】:

  • maxlols >> 我不明白为什么 Java 中的事情必须如此复杂。

标签: java soap wsdl


【解决方案1】:

除非您需要标准 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);

此示例失败并出现错误,但可能是因为会话令牌无效。

【讨论】:

  • +1 用于提及导入工具。这是我第一次听说这个
【解决方案2】:

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

你可能会觉得这个问题很有趣What methods exist to auto-generate java client stubs from WSDL files?

【讨论】:

    【解决方案3】:

    我将回应 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 代码。这并不难,只是你必须得到正确的命令行咒语。

    【讨论】:

      【解决方案4】:

      选中“使用 SAAJ(文档/文字)发送或发布 SOAP 消息”... 它使您能够通过 SOAP 发送和获取 XML,并直接操作 SOAP 信封的内容,而无需任何解析和解释/绑定到 java 对象中,例如当您使用 wsimport 时...

      http://users.skynet.be/pascalbotte/rcx-ws-doc/saajpost.htm

      问候

      【讨论】:

        【解决方案5】:

        看看CXF

        【讨论】:

        • 嘿,我已经下载了,但我真的不知道从哪里开始。我只想给一个 SOAP 客户端对象我的 wsdl url,向它发出一些请求并查看一些响应。肯定只需要几行 Java 代码?
        猜你喜欢
        • 2011-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-21
        • 2019-07-22
        • 1970-01-01
        相关资源
        最近更新 更多