Tuesday, August 25, 2009

CWWBE0085E: Incompatible types - org.apache.commons.jxpath.JXPathException: Exception trying to create xpath

Error

[25/02/09 14:22:20:824 GMT] 00000087 BpelEngine    I   CWWBE0085E: Incompatible types were encountered during the assignment to a variable or partner link 'determineClawbackEligibilityRequest' in activity 'Assign'.
        org.apache.commons.jxpath.JXPathException: Exception trying to create xpath Customer/PortfolioAccount/CancelledSubscriptionList/Subscription[bpws:getVariableData('Index1')]/Id; JXPath can only create a path if it uses exclusively the child:: and attribute:: axes and has no context-dependent predicates
[25/02/09 14:22:20:824 GMT] 00000087 BpelEngine    I   CWWBE0163I: Business Process Choreographer is using navigation based on JMS in long-running business processes

Root Cause

When you use for loop in BPEL, and try to assign from a Xpath to a Xpath expression using loop variable , you will see the above error.

Like 
Requset/customers/customer[LoopVar]/id = Response/customers/customer[LoopVar]/id.

In the left hand side the expression is fine, but the predicate (right side) is not correct in BPEL. you cant use variable in case of BPEL for loop predicate.

Resolution

You have to assign the individual id to a temp variable and that temp variable you have to add to the final response.

Requset/customers/customer[LoopVar]/id = Temp_id.

each_Cust = createNewCustomer.setString("id",Temp_id)
Cust_List = response.getList("customers/customer")
Cust_List.add(each_Cust);





No comments: