我正在通过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
其他所有对象方法也不起作用。
有谁知道我做错了什么?
答案 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
是否涉及此事。