,如果我有WSDL描述,我该如何调用Web服务? (使用Web服务)
我不是SOAP和WSDL的专家,但我有Perl代码,我想移植到R.,如果我有WSDL描述,我该如何调用Web服务? (使用Web服务)
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在这方面没有好的和现在的(积极维护的)支持是正确的?
签出OmegaHat上的SSOAP包装。它与S和R兼容。它甚至有一个genSOAPClientInterface
函数用于在WSDL中生成可用操作作为R函数,并为WSDL中描述的所有数据类型生成关联的S4类。它利用XML和RCurl(这两者都是由同一作者创建的)。他提供了一个directory full of examples和相当有用的PDF documentation。
我在使用WSDL时遇到了一些问题(并且仍然使用修改后的代码来实现它),但是如果遇到问题,该软件包的作者非常有帮助,并且对错误报告作出响应。
我试图使用SSOAP包,但它似乎是相当过时的问题,包括对其他包的依赖关系破坏,名称空间冲突和无限递归。它也从Cran中移除,并与它依赖的XMLSchmea软件包一起移除。
我用SOAP UI代替与RCurl结合使用,这是更成功的方法。 RCurl示例可能在另一篇文章中找到:https://stackoverflow.com/a/34516458/5189780。
SOAP UI是非常易于使用的工具,用于测试和探索SOAP Web服务。它为SOAP请求提供XML代码。这个XML可能被复制并用在R代码中以形成RCurl请求的主体。
该软件包也位于GitHub上:https://github.com/omegahat/SSOAP – 2014-07-02 17:54:05