2013-06-19 59 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服务?