【问题标题】:in R, how can I call a web service if I have WSDL description of it? (consume web service)在 R 中,如果我有 Web 服务的 WSDL 描述,我该如何调用它? (使用网络服务)
【发布时间】:2012-03-27 14:22:44
【问题描述】:

我不是 SOAP 和 WSDL 方面的专家,但我有想要移植到 R 的 Perl 代码。

Perl 代码如下所示(来自https://www.pharmgkb.org/resources/downloads_and_web_services.jsp):

use SOAP::Lite;
import SOAP::Data 'type';

sub main {
  my $argcount = scalar (@ARGV);
  if ($argcount != 1) {
    print "usage: diseases.pl <PharmGKB accession id>\n";
    exit -1;
  }

  # make a web services call to server
  my $call = SOAP::Lite
    -> readable (1)
    -> uri('PharmGKBItem')
    -> proxy('http://www.pharmgkb.org/services/PharmGKBItem')
    -> searchDisease($ARGV[0]);

  if ($call->fault) {
    print $call->faultcode . ": " . $call->faultstring . "\n";
  } else {
    my $result = $call->result;

阅读了有关 rsoap 和 SSOAP 包的信息,但没有得到任何好的信息。 我需要的是全面支持,例如调用服务并提供库来解析输出。我更喜欢一些库而不是原始编码。我对 XML 包很好,对 RCurl 不是很好。我认为 R 对此没有良好且当前(积极维护)的支持是正确的吗?

【问题讨论】:

    标签: r web-services soap wsdl


    【解决方案1】:

    在 OmegaHat 上查看 SSOAP 包。它与 S 和 R 兼容。它甚至具有 genSOAPClientInterface 函数,用于在 WSDL 中生成可用操作作为 R 函数,并为 WSDL 中描述的所有数据类型生成关联的 S4 类。它利用 XML 和 RCurl(两者都是由同一作者创建的)。他提供了一个directory full of examples 和非常有用的PDF documentation

    我在使用我的 WSDL 时遇到了一些问题(并且我仍在使用修改后的代码来让它工作),但是如果您遇到问题,包的作者非常有帮助并且对错误报告做出响应。

    【讨论】:

      【解决方案2】:

      我尝试使用 SSOAP 包,但它似乎已经过时,有很多问题,包括对其他包的依赖关系中断、命名空间冲突和无限递归。它也与它所依赖的 XMLSchmea 包一起从 Cran 中删除。

      我已将SOAP UI 与 RCurl 结合使用,这是更成功的方法。 RCurl 示例可以在另一篇文章中找到:https://stackoverflow.com/a/34516458/5189780

      SOAP UI 是一个非常易于使用的工具,用于测试和探索 SOAP Web 服务。它为 SOAP 请求提供 XML 代码。此 XML 可能会被复制并在 R 代码中使用以形成 RCurl 请求的主体。

      【讨论】:

        【解决方案3】:

        omegahat.org 不再有效,但omegahat.net 有效,软件SSOAP 可供下载。但是,无法使用 R 版本 3.6.2 安装此软件包

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-25
          • 1970-01-01
          • 1970-01-01
          • 2010-11-19
          • 1970-01-01
          相关资源
          最近更新 更多