2012-03-27 24 views
5

Tôi không phải là một chuyên gia của SOAP và WSDL nhưng tôi có mã Perl mà tôi muốn đến cổng để R.trong R, làm thế nào tôi có thể gọi một dịch vụ web nếu tôi có mô tả WSDL về nó? (Tiêu thụ dịch vụ web)

Mã Perl trông như thế này (từ 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; 

Những điều đã đọc về gói rsoap và SSOAP nhưng không nhận được bất kỳ thông tin tốt đẹp nào. Những gì tôi cần là hỗ trợ đầy đủ, chẳng hạn như gọi dịch vụ và cung cấp thư viện để phân tích đầu ra. Tôi thích một số thư viện hơn là mã hóa thô. Tôi tốt với gói XML và không phải là rất tốt với RCurl. Tôi đúng khi nghĩ rằng không có hỗ trợ tốt và hiện tại (tích cực duy trì) trong R cho điều này?

Trả lời

4

Thanh toán gói SSOAP trên OmegaHat. Nó tương thích với cả S và R. Nó thậm chí có chức năng genSOAPClientInterface để tạo các Hoạt động có sẵn trong WSDL như các hàm R và tạo các lớp S4 liên quan cho tất cả các kiểu dữ liệu của bạn được mô tả trong WSDL. Nó thúc đẩy XML và RCurl (cả hai đều được tạo ra bởi cùng một tác giả). Ông cung cấp directory full of examples và khá hữu ích PDF documentation.

Tôi gặp một số vấn đề khi sử dụng WSDL (và vẫn đang sử dụng mã đã sửa đổi để làm việc), nhưng tác giả của gói này cực kỳ hữu ích và đáp ứng với các báo cáo lỗi, nếu bạn gặp sự cố.

+2

Gói này cũng có trên GitHub: https://github.com/omegahat/SSOAP –

0

Tôi đã cố gắng sử dụng gói SSOAP, nhưng nó có vẻ khá lỗi thời với các vấn đề, bao gồm các phụ thuộc bị hỏng trên các gói khác, xung đột không gian tên và thu thập vô hạn. Nó cũng được loại bỏ khỏi Cran cùng với gói XMLSchmea mà nó phụ thuộc vào.

Tôi đã sử dụng SOAP UI thay vì kết hợp với RCurl và đó là cách tiếp cận thành công hơn nhiều. Ví dụ RCurl có thể được tìm thấy trong một bài đăng khác: https://stackoverflow.com/a/34516458/5189780.

SOAP UI rất dễ sử dụng công cụ để thử nghiệm và khám phá các dịch vụ web SOAP. Nó cung cấp mã XML cho các yêu cầu SOAP. XML này có thể được sao chép và sử dụng trong mã R để tạo thành một phần của yêu cầu RCurl.

Các vấn đề liên quan