3

Web 服务接受 xml 数据并再次返回 xml 中的值。我正在尝试将 xml 数据发布到 Web 服务,但没有成功,我需要使用 Perl 来完成。以下是我尝试过的代码:

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 实现相同的目标?

4

2 回答 2

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";
于 2013-06-19T07:56:28.137 回答
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:您确定您的网络服务是 SOAP 服务吗?

于 2013-06-19T08:45:59.750 回答