Hi,
I am trying to write a process to deploy on Ode 1.0 running inside
ServiceMix. All was going fine until I tried to add a catch clause to an
invoke in the process. The process compiles fine, just the catch clause gets
ignored and the fault is thrown out of the service. If I copy and paste the
catch clause to the <faultHandlers> section on the process, then all works
as expected.
First the snippet from the wsdl service declaring the fault:
<wsdl:portType name="marketbus">
<wsdl:operation name="getRecord">
<wsdl:input message="tns:getRecordRequest"/>
<wsdl:output message="tns:getRecordResponse"/>
<wsdl:fault name="noRecordFault"
message="tns:noSuchRecordFault"></wsdl:fault>
</wsdl:operation>
</wsdl:portType>
Now the snippet from the bpel service:
<bpws:invoke inputVariable="recordRequest" name="invokeMarketBus"
operation="getRecord" outputVariable="recordResponse"
partnerLink="marketbusClient" portType="ns1:marketbus">
<bpws:catch faultName="ns1:noRecordFault">
<bpws:sequence name="HiddenSequence">
<bpws:assign name="buildFaultMessage" validate="no">
<bpws:copy>
<bpws:from>
<bpws:literal>No such message.</bpws:literal>
</bpws:from>
<bpws:to>$echoRequest.payload</bpws:to>
</bpws:copy>
</bpws:assign>
<bpws:invoke inputVariable="echoRequest" name="invokeEchoService"
operation="echoMessage" partnerLink="echoClient"
portType="ns1:EchoPortType"/>
</bpws:sequence>
</bpws:catch>
</bpws:invoke>
And the debug output from the Ode engine (snippet):
DEBUG - BpelProcess - InvokeResponse event for iid 20
DEBUG - BpelRuntimeContextImpl - Invoking message response for mexid
4611686018427387948 and channel 20
DEBUG - JacobVPU - injecting
BpelRuntimeContextImpl$4(...)
DEBUG - BpelRuntimeContextImpl - Triggering response
DEBUG - SCOPE - ({OScope 'invokeMarketBus'
id=50},TerminationChannel#14,ParentScopeChannel#16): has
a fault handler for {http://abnamro.com/sc}noRecordFault: {OCatch
faultName=null, faultVariable=null}
DEBUG - SCOPE - ({OCatch faultName=null,
faultVariable=null},TerminationChannel:FH#21,ParentScopeCha
nnel:FH#22): has no fault handler for {http://abnamro.com/sc}noRecordFault;
scope will propagate FAULT!
DEBUG - SCOPE - ({OScope
'__PROCESS_SCOPE:algotf-bpe' id=3},TerminationChannel#1,ParentScopeChannel#
2): has no fault handler for {http://abnamro.com/sc}noRecordFault; scope
will propagate FAULT!
DEBUG - BpelProcess - ProcessImpl completed with fault '{
http://abnamro.com/sc}noRecordFault'
DEBUG - ProcessDaoImpl - Removing completed process instance
20 from in-memory store.
DEBUG - OdeService - Consuming MEX tracker
ID:gbws-00065343-3167-1181051426187-7:20
WARN - OdeService - Ignoring unknown async reply:
{MyRoleMex#4611686018427387947 [Client ID:gbws-0006534
3-3167-1181051426187-7:20] calling {
http://abnamro.com/sc/algotf}WorkflowService.processNewRecord(...)}
DEBUG - QuartzSchedulerImpl - Commiting transaction.
Exactly the same catch statement (copied and pasted) works as expected if
placed in the <faultHandlers> section of the process.
I am reasonably new to BPEL, so may have missed something?
Thanks
Mike Horwitz