重新解释一下这个问题 我正在使用WSO2 BPS服务器来运行业务流程以在WSO2 ESB上调用RestProxy服务。我通过名为LVCounterOut的输出变量得到响应。 LVCounterOut是基于消息类型的变量,响应采用XML格式,如下所示:
<message>
<payload>
<Response>
<Terminal>
<Name>RValue</Name>
<Value>0.000000</Value>
</Terminal>
<Terminal>
<Name>SValue</Name>
<Value>**1.000000**</Value>
</Terminal>
</Response>
</payload>
</message>
何我可以将上述变量中的原子值分配给业务流程的输出变量。例如,在上面的响应中,我想将“Value”节点的数字部分“1.0000000”分配给进程的输出变量,该数字部分将是字符串格式。接下来的问题是如何将此字符串值转换为整数,以便我可以在我的业务流程中的If控件中使用它。例如“如果值&gt; 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不是我最强烈的观点,我仍然试图掌握它。
答案 0 :(得分: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和partName时使用''。这里“/ ns:return”是xpath表达式。