2012-11-20 55 views
1

僅需更改問題 我使用WSO2 BPS服務器運行業務流程以在WSO2 ESB上調用RestProxy服務。我通過名爲LVCounterOut的輸出變量得到迴應。所述LVCounterOut是消息類型的基於變量和響應是XML格式,如下所示:如何從基於消息的變量中提取原子值並使用XPATH分配給輸出變量

<message> 
<payload> 
    <Response> 
    <Terminal> 
     <Name>RValue</Name> 
     <Value>0.000000</Value> 
    </Terminal> 
    <Terminal> 
     <Name>SValue</Name> 
     <Value>**1.000000**</Value> 
    </Terminal> 
    </Response> 
</payload> 
</message> 

何我可以分配在上述變量的業務過程的輸出變量的原子值。例如,在上面的響應中,我想將字符串格式爲「1.0000000」的「值」節點的數值部分賦值給進程的輸出變量。接下來的問題是如何將此字符串值轉換爲整數,以便我可以在業務流程中的If控件中使用它。例如,「如果值> 10」援引ServiceA其他調用ServiceB」。

以下是我已經嘗試做從LVCounterOut變量輸出分配給輸出變量‘ProcessOutput’。

<bpel:assign validate="no" name="AssignProxyOut"> 
     <bpel:copy> 
      <bpel:from> 
       <bpel:literal> 
        <tns:LVCounterProcessResponse xmlns:tns="http://wso2.org/bps/sample" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><tns:return>tns:return</tns:return> 

        </tns:LVCounterProcessResponse> 
       </bpel:literal> 
      </bpel:from> 
      <bpel:to variable="ProcessOutput" part="payload"></bpel:to> 
     </bpel:copy> 
     <bpel:copy> 
      <bpel:from> 
       <![CDATA[$LVCounterOut.payload/ns:Response/ns:Terminal[2]/ns:Value/text()]]> 
      </bpel:from> 
      <bpel:to part="payload" variable="ProcessOutput"> 
       <bpel:query queryLanguage="urn:oasis:names:tc:wsbpel:2.0:sublang:xpath1.0"><![CDATA[tns:return]]></bpel:query> 
      </bpel:to> 
     </bpel:copy> 
    </bpel:assign> 

當我使用tryit的BPS服務器上運行的業務過程中,我得到以下錯誤

[2012-11-20 16:41:59,882] ERROR - BpelEngineImpl - Scheduled job failed; jobDetail=JobDetails(instanceId: null mexId: hqejbhcnphr7rsjnbxjhrs processId: 
{http://wso2.org/bps/sample}LVSelectProcess-127 type: INVOKE_INTERNAL channel: null correlatorId: null correlationKeySet: null retryCount: null inMem: 
false detailsExt: {enqueue=false}) java.lang.ClassCastException: java.lang.String cannot be cast to org.w3c.dom.Node at 
org.jaxen.dom.DocumentNavigator.getChildAxisIterator(DocumentNavigator.java:152) 
at org.jaxen.util.DescendantAxisIterator.next(DescendantAxisIterator.java:129) 

我認爲這裏使用XPath是錯誤的或我要對完全錯誤的方式?我道歉,但XML和XPATH不是我最強的一點,我是sti我會盡力去解決它。

+1

我怎麼會因爲問一個問題而被拒絕?我被困在一個問題上,試圖在這裏得到答案,有人可以給我一個被拒絕的理由嗎?答案也是有用的 – uraza2001

回答

2

任何人誰碰到過類似的問題呢,我已經解決了這個查詢,如下所示:

要從調用服務的輸出消息變量提取原子值可以使用

BPEL:getVaribleData( varName,partName,xpathStr)函數。

該函數未在WS-BPEL-2.0規範中定義。但是這在WSO2-BPS和Apache-ODE中起作用。它可用於使用XPath表達式從變量中提取一組元素。

如 -

<bpel:copy> 
<bpel:from> 
    <![CDATA[count(bpel:getVariableData(‘$Variable','$partName')/ns:return)]]> 
</bpel:from> 
<bpel:to variable="itemCount"></bpel:to> 
</bpel:copy> 

記住使用「」傳遞的varName和零件名稱時。這裏「/ ns:return」是xpath表達式。