不能将SOAP对象的对象方法与SOAP :: Lite一起使用

时间:2012-05-31 09:05:21

标签: perl soap jira soaplite

我正在通过SOAP从我们的Jira中读取数据,并收到一组RemoteIssue - 对象。现在我想迭代这些并获取每张票的状态。 RemoteIssue的documentation表示有getStatus() - 方法。当我在对象上调用它时,我的程序会抛出错误。

一些代码:

my $soap = SOAP::Lite->uri($soap_uri)->proxy($soap_proxy);
my $login = $soap->login( $soap_user, $soap_password)->result;

if ($login) {
    # This works
    my $issues = $soap->getIssuesFromJqlSearch( $login, "project = \"$project\" AND fixVersion = \"$project_version\"", 500 );

    if ($issues) {
        foreach my $issue (@{$issues->result}) {
            my $foo = $issue->getStatus(); # This doesn't work
            print Dumper $foo;
        }
    }
}
$soap->logout();

抛出的错误:

Can't locate object method "getStatus" via package "RemoteIssue" at D:\ZeuS\lib/ZeuS.pm line 81

其他所有对象方法也不起作用。

有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

从我收集的内容来看,您的印象是您正在接收您将在Java使用者上操作的Java对象。

除非$issue->getStatus()是一个SOAP调用(我认为不是这样),你不是在处理API,而是在处理响应的Perl中的SOAP::Lite表示在XML中。

getIssuesFromJqlSearch似乎是远程呼叫。从那以后,您应该将$issues作为SOAP::SOM对象。然后使用result方法正确处理。

这将为该对象所赋予的类定义任何方法。

要查看所有此对象响应的内容,请尝试以下操作:

use mro ();
use Scalar::Util qw<blessed>;
...
    foreach my $issue (@{$issues->result}) {
        say '$issue ISA ('
          . join( ',', @{ mro::get_linear_isa( blessed( $issue )) } )
          . ')'
          ;
          ...
    }

$issue将只有那些在Perl端为它定义的方法。

  • 注意:您的代码中不清楚ZeuS.pm是否涉及此事。