Now remote/binding faults are fault-policy driven. These fault policy files have specific actions defined like ora-retry and ora-java-action which take care of retrying the error and sending error emails. (More details in my next post) During an invoke activity, when a binding/remote fault occurs , the underlying fault management framework of the Oracle SOA catches the fault and performs actions as defined in the associated fault policy and then rethrows the fault back to the catch blocks. Now, the catch activity in the BPEL should process the fault and as part of fault processing it has to rethrow the fault back inside the catch block,so that transaction roll back happens correctly and instance appears as faulted in console.
A common error seen while trying to compile ABCS code after adding fault handlers is :
Error(90): unresolved messageType
WSDL messageType "{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage" of variable "SystemFaultVar" is not defined in any of the WSDL files. Make sure the WSDL messageType "{http://schemas.oracle.com/bpel/extension}RuntimeFaultMessage" is defined in one of the WSDLs referenced by the deployment descriptor
To get rid of above error follow below steps:
1. import oramds:/soa/shared/bpel/RuntimeFault.wsdl into your process.wsdl
<wsdl: import namespace="http://schemas.oracle.com/bpel/extension" location="oramds:/soa/shared/bpel/RuntimeFault.wsdl"/>2. Create a variable(SystemFaultVar) based upon the messagetype RuntimeFaultMessage in this wsdl.
<variables> <variable name="SystemFaultVar" messageType="bpelx:RuntimeFaultMessage"/> </variables>3. In the catch branch use the RuntimeFaultMessage as the Fault Variable
<faultHandlers> <catch faultName="bpelx:bindingFault" faultVariable="SystemFaultVar"> ...4. Also make sure in your composite.xml, you import the RuntimeFault.wsdl before importing the process.wsdl
Try compiling and deploying the process. It should work fine now !
Thank you a lot! This help me
ReplyDelete