0

我正在通过 SOAP 从我们的 Jira 中读取数据并收到一组RemoteIssue-Objects。现在我想遍历这些并获取每张票的状态。RemoteIssue的文档说有一个getStatus()-Method。当我在对象上调用它时,我的程序会引发错误。

一些代码:

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

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

有谁知道我做错了什么?

4

1 回答 1

1

根据我收集到的信息,您的印象是您正在接收您将在 Java 使用者上操作的 Java 对象。

除非$issue->getStatus()是 SOAP 调用(我认为不是),否则您不是在处理 API,而是在处理SOAP::LiteXML 响应的 Perl 表示。

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这件事的来源。
于 2012-05-31T11:42:31.117 回答