Does Ode not support the catch clause below an invoke as specified here:
http://docs.oasis-open.org/wsbpel/2.0/wsbpel-specification-draft.html#_Toc143402873
?
Mike
On 6/5/07, Alex Boisvert <[EMAIL PROTECTED]> wrote:
Hi Michael,
According to the BPEL spec, your <bpel:catch> must be placed under the
<bpel:faultHandlers> element. So the real issue here is insufficient
validation to warn you against placing a <bpel:catch> directly within a
scope...
alex
On 6/5/07, Michael Horwitz <[EMAIL PROTECTED]> wrote:
>
> 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
>