2012-05-31 45 views
0

我正在通过SOAP从我们的Jira读取数据并接收RemoteIssue -Objects数组。现在我想遍历这些并获取每张票的状态。 RemoteIssue的documentation表示有一个getStatus()-方法。当我在对象上调用它时,我的程序会引发错误。SOAP :: Lite无法使用SOAP对象的对象方法

一些代码:

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

从我所了解的情况来看,您的印象是您正在接收您将在Java用户上操作的Java对象。

除非$issue->getStatus()是一个SOAP调用(我不认为它是),你没有处理API,你正在处理SOAP::Lite在Perl中用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进入这件事情。
+0

ZeuS.pm是其中代码来自模块。好吧,看起来我完全错过了SOAP :: Lite的用法。感谢您的解释。 – Demnogonis

+0

好的。我读到SOAP ::精简版更多的文档,但我仍然无法弄清楚如何使用返回对象的方法。你能最终帮助我吗? – Demnogonis

相关问题