2011-12-25 52 views
4

我是bpel的新生,我只是在測試一個If-else。 ,我一直在使用eclipse創建的BPEL文件是:IfElseSample.bpelBPEL和selectionFailure錯誤

它成功地部署,沒有錯誤,但是當我嘗試測試它使用類似簡單的代碼:

try { 
     tps.bpel.ifelse.IfElseSample_Service service = new tps.bpel.ifelse.IfElseSample_Service(); 
     tps.bpel.ifelse.IfElseSample port = service.getIfElseSamplePort(); 
     tps.bpel.ifelse.IfElseSampleRequest payload = new tps.bpel.ifelse.IfElseSampleRequest(); 
     payload.setInput("John"); 
     tps.bpel.ifelse.IfElseSampleResponse result = port.process(payload); //Exception occur here 
     System.out.println("Result = "+result); 
    } catch (Exception ex) { 
     System.out.println("Exception=> "+ex); 
    } 

我得到了一個異常錯誤:

javax.xml.ws.soap.SOAPFaultException: axis2ns6575:selectionFailure

而且,這裏是所有的my eclipse project。 我用:

  1. 的apache-tomcat的-7.0.23
  2. Apache的歌頌戰爭-1.3.5
  3. 的Eclipse的Java EE IDE的Web開發。版本:Indigo Service Release 1

謝謝。

回答

3

BPEL標準要求在對其執行XPath查詢之前初始化變量。在你的例子中,你將值分配給未初始化的輸出變量。由於未初始化的變量爲空,XPath表達式tns:result不會選擇任何節點,因此會拋出選擇失敗。您需要首先初始化變量(例如,在開始的<assign>活動中)。 Eclipse BPEL設計器可以爲你做這件事(它通常會問你是否要初始化變量)。代碼應該看起來大致是這樣的:

<bpel:assign> 
    <bpel:copy> 
    <bpel:from> 
     <bpel:literal> 
     <payload><tns:result/></payload> 
     </bpel:literal> 
    </bpel:from> 
    <bpel:to>$output.payload</bpel:to> 
    </bpel:copy> 
</bpel:assign> 
+0

謝謝男人的回答。 ;) – Rahman 2012-01-15 20:36:35

+0

雖然我遇到了一件奇怪的事情,但是我有一個版本爲1.6的BPEL工作,嘗試測試一些東西在1.7中增加,但不喜歡它,所以將所有東西都還原到版本1.6,清理/發佈頌歌服務器,開始有selectionFailure錯誤,用你的方式替換自動生成的初始化(只需要改變結果/輸出名稱,因爲我已經改變了我的bpel中的那些)。非常感謝 – RMiranda 2013-11-27 01:06:57