【发布时间】:2011-05-05 01:32:54
【问题描述】:
当我运行我的 perl 脚本(版本:5.6.1)时,出现以下错误: 找不到方法的命名空间(16:方法) 我的代码是:
my $ws_url = '$url';
my $ws_uri = '$uri';
my $ws_xmlns = '$xmlns';
my $soap = SOAP::Lite
-> uri($ws_uri)
-> on_action( sub { join '/s/', $ws_uri, $_[1] } )
-> proxy($ws_url);
my $method = SOAP::Data->name('Add')
->attr({xmlns => $ws_xmlns});
my @params = ( SOAP::Data->name(addParam => $myParam));
$response = $soap->call($method => @params);
然后我阅读了链接中的文档: http://docs.activestate.com/activeperl/5.8/lib/SOAP/Lite.html,上面写着:
请注意,尽管您使用此方法拥有更多控制权,但您应该 明确指定方法的命名空间属性,即使您制作了 uri() 早点打电话。所以,如果你必须在方法元素上有命名空间,而不是: 打印 SOAP::Lite -> 新的(....) -> uri('mynamespace') # 将被忽略 -> 调用(SOAP::Data->name('method') => @parameters) -> 结果; 做 打印 SOAP::Lite -> 新的(....) -> 调用(SOAP::Data->name('method')->attr({xmlns => 'mynamespace'}) => @参数) -> 结果; ………… ………… 此外,如果您尝试使用前缀名称调用它,它将成为致命错误: 打印 SOAP::Lite -> 新的(....) -> uri('mynamespace') # 将被忽略 -> 调用(SOAP::Data->name('a:method') => @parameters) -> 结果; 给你: 找不到方法的命名空间(a:method) 因为没有任何东西与前缀“a”相关联。所以,我尝试将代码更改为:
my $soap = SOAP::Lite
-> on_action( sub { join '/s/', $ws_uri, $_[1] } )
-> proxy($ws_url);
my @params = ( SOAP::Data->name(addParam => $myParam));
my $response = $soap->call(SOAP::Data->name('Add')->attr({xmlns => $ws_xmlns}) => @params)
->result;
它仍然没有工作.. 有什么建议吗?
先谢谢了!
【问题讨论】:
标签: web-services perl client perl-module