2013-06-19 94 views
3

Web服務接受xml數據並將值返回到xml中。我正在嘗試將xml數據發佈到Web服務,但沒有任何成功,我需要使用Perl來完成。以下是代碼我想:Perl:無法將xml數據發佈到Web服務

use SOAP::Lite ; 
my $URL = "http://webservice.com:7011/webServices/HealthService.jws?WSDL="; 
my $xml_data = '<Request>HealthCheck</Request>' ; 
my $result = SOAP::Lite -> service($xml_data); 
print $result ; 

我試圖與代理另一種方法:

use SOAP::Lite +trace => 'debug'; 
my $URI = 'webServices/HealthService' ; 
my $URL = "http://webservice.com:7011/webServices/HealthService.jws?WSDL=" ; 
my $test = SOAP::Lite -> uri($URI) 
         -> proxy($URL) ; 
my $xml_data = '<Request>HealthCheck</Request>' ; 
my $result = $test -> healthRequest($xml_data); 
print $result ; 

然而,這是拋出以下錯誤:

Can't locate class method "http://webservice.com:7011/healthRequest" via package "SOAP::Lite\" at 7.pl line 4. BEGIN failed--compilation aborted at 7.pl line 4. 

的Web服務只提供了一個方法HealthRequest 。我不知道爲什麼它試圖找出SOAP:Lite中的類方法。這兩種方法我都得到了同樣的錯誤。

有沒有其他的方法可以使用Perl來實現相同的功能?

回答

0

嘗試這樣的事情,我沒有測試過,所以只測試一下,看看會發生什麼,你至少不應該得到PM錯誤。

use strict; 
use SOAP::Lite; 
my $xml_data = '<Request>HealthCheck</Request>' ; 
my $soap = SOAP::Lite  
    ->uri("webServices/HealthService") 
    ->proxy("http://webservice.com:7011/webServices/HealthService.jws?WSDL="); 
    print $soap->service($xml_data),"\n"; 
0

如果你想自己創建的XML,而不是委派任務SOAP::Lite,你需要讓SOAP::Lite知道你在做什麼:

$soap = SOAP::Lite->ns($URI)->proxy($URL); 
$soap->HealthCheck(SOAP::Data->type(xml => $xml_data)); 

我有我的懷疑,雖然,這將與您的XML一起工作。

如果你的要求確實沒有可變參數,這可能工作:

$soap = SOAP::Lite->ns($URI)->proxy($URL); 
$soap->HealthCheck; 

PS:你們確保您的Web服務是一個SOAP服務?