2012-05-31 41 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

相關問題