在R中,如果我有WSDL描述,我如何调用Web服务? (使用Web服务)

时间:2012-03-27 14:22:45

标签: r web-services soap wsdl

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

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中没有好的和当前的(积极维护的)支持这是正确的吗?

3 个答案:

答案 0 :(得分:4)

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

在使用我的WSDL时我遇到了一些问题(并且仍在使用修改后的代码使其工作),但是如果遇到问题,该软件包的作者对bug报告非常有帮助和响应。< / p>

答案 1 :(得分:0)

我尝试使用SSOAP包,但它似乎已经过时了解问题,包括破坏其他包的依赖性,命名空间冲突和无限递归。它也与Cran一起从它依赖的XMLSchmea包中删除。

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

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

答案 2 :(得分:0)

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