You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ode.apache.org by Will Darby <wd...@cedarpointcom.com> on 2010/12/08 15:21:10 UTC

Synchronous invoke suppressing soap fault

Hello,

I ran into issues detecting faults raised during synchronous invoke operations.

Specifically,  during the BPEL script below if I get a

<soapenv:Fault  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">

It is suppressed by the invoke operation, which eventually times out. I can work around this by adding:
<ext:failureHandling xmlns:ext="http://ode.apache.org/activityRecovery">
   <ext:faultOnFailure>true</ext:faultOnFailure>
</ext:failureHandling>

But the documentation indicates that this is not required. I looked through Jira, but didn't see this issue reported. Is this expected behavior or should I write up the issue?

<bpel:faultHandlers>
  <bpel:catch faultName="sfWsdl:CreateException"
                         faultVariable="createEx" faultMessageType="sfWsdl:ExceptionMsg">
    <bpel:sequence>
      ...
    </bpel:sequence>
  </bpel:catch>
 <bpel:catchAll>
     ...
   </bpel:catchAll>
</bpel:faultHandlers>

<bpel:sequence>
  <bpel:invoke name="sendFusionCreateRqst"
                       partnerLink="SafariFusionOssLink"
                       portType="sfWsdl:FusionOssPort"
                       operation="create"
                       inputVariable="sndCreateRqst"
                       outputVariable="sndEditResp"/>
</bpel:sequence>

Thanks
- Will Darby


RE: Synchronous invoke suppressing soap fault

Posted by Will Darby <wd...@cedarpointcom.com>.
Thanks for the reply.

Just to clarify my understanding, I'd like to explain it a different way.

Before I added the <failureHandler> extension, when my synchronous <invoke> operation received a standard SOAP fault, it would be suppressed, meaning that my <faultHandlers><catchAll> would not be invoked. Since this was a standard SOAP fault, and not a failure condition (as I understand it), I expected the <catchAll> handler to be invoked. 
Could it be that the fault reported was not specified in the WSDL for the operation?

Thanks again
- Will


-----Original Message-----
From: Tammo van Lessen [mailto:tvanlessen@gmail.com] 
Sent: Wednesday, December 08, 2010 9:51 AM
To: user@ode.apache.org
Subject: Re: Synchronous invoke suppressing soap fault

Hi Will,

ODE distinguishes between faults and failures. Faults are typically
faults with a business meaning, declared and/or expected exceptions etc.
and are SOAP faults during runtime. Failures are things unexpected
things that happen on a transport/runtime level, like timeouts, network
fragmentation etc. When such a failure occurs, the connected activity
goes into a failed stated. This means the process instance is suspended
until the activity is recovered. This can be done via the Process
Management API (retry, cancel, fault). The failureHandling extension can
be used to avoid this by setting a recovery default. In your example,
you're translating a failure into a fault. This fault can then be
handled by BPEL's fault handler. So if I understood your question
correctly, this is the intended behavior.

HTH,
  Tammo

On 08.12.2010 15:21, Will Darby wrote:
> Hello,
> 
> I ran into issues detecting faults raised during synchronous invoke operations.
> 
> Specifically,  during the BPEL script below if I get a
> 
> <soapenv:Fault  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
> 
> It is suppressed by the invoke operation, which eventually times out. I can work around this by adding:
> <ext:failureHandling xmlns:ext="http://ode.apache.org/activityRecovery">
>    <ext:faultOnFailure>true</ext:faultOnFailure>
> </ext:failureHandling>
> 
> But the documentation indicates that this is not required. I looked through Jira, but didn't see this issue reported. Is this expected behavior or should I write up the issue?
> 
> <bpel:faultHandlers>
>   <bpel:catch faultName="sfWsdl:CreateException"
>                          faultVariable="createEx" faultMessageType="sfWsdl:ExceptionMsg">
>     <bpel:sequence>
>       ...
>     </bpel:sequence>
>   </bpel:catch>
>  <bpel:catchAll>
>      ...
>    </bpel:catchAll>
> </bpel:faultHandlers>
> 
> <bpel:sequence>
>   <bpel:invoke name="sendFusionCreateRqst"
>                        partnerLink="SafariFusionOssLink"
>                        portType="sfWsdl:FusionOssPort"
>                        operation="create"
>                        inputVariable="sndCreateRqst"
>                        outputVariable="sndEditResp"/>
> </bpel:sequence>
> 
> Thanks
> - Will Darby
> 
> 

-- 
Tammo van Lessen - http://www.taval.de

Re: Synchronous invoke suppressing soap fault

Posted by Tammo van Lessen <tv...@gmail.com>.
Hi Will,

ODE distinguishes between faults and failures. Faults are typically
faults with a business meaning, declared and/or expected exceptions etc.
and are SOAP faults during runtime. Failures are things unexpected
things that happen on a transport/runtime level, like timeouts, network
fragmentation etc. When such a failure occurs, the connected activity
goes into a failed stated. This means the process instance is suspended
until the activity is recovered. This can be done via the Process
Management API (retry, cancel, fault). The failureHandling extension can
be used to avoid this by setting a recovery default. In your example,
you're translating a failure into a fault. This fault can then be
handled by BPEL's fault handler. So if I understood your question
correctly, this is the intended behavior.

HTH,
  Tammo

On 08.12.2010 15:21, Will Darby wrote:
> Hello,
> 
> I ran into issues detecting faults raised during synchronous invoke operations.
> 
> Specifically,  during the BPEL script below if I get a
> 
> <soapenv:Fault  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
> 
> It is suppressed by the invoke operation, which eventually times out. I can work around this by adding:
> <ext:failureHandling xmlns:ext="http://ode.apache.org/activityRecovery">
>    <ext:faultOnFailure>true</ext:faultOnFailure>
> </ext:failureHandling>
> 
> But the documentation indicates that this is not required. I looked through Jira, but didn't see this issue reported. Is this expected behavior or should I write up the issue?
> 
> <bpel:faultHandlers>
>   <bpel:catch faultName="sfWsdl:CreateException"
>                          faultVariable="createEx" faultMessageType="sfWsdl:ExceptionMsg">
>     <bpel:sequence>
>       ...
>     </bpel:sequence>
>   </bpel:catch>
>  <bpel:catchAll>
>      ...
>    </bpel:catchAll>
> </bpel:faultHandlers>
> 
> <bpel:sequence>
>   <bpel:invoke name="sendFusionCreateRqst"
>                        partnerLink="SafariFusionOssLink"
>                        portType="sfWsdl:FusionOssPort"
>                        operation="create"
>                        inputVariable="sndCreateRqst"
>                        outputVariable="sndEditResp"/>
> </bpel:sequence>
> 
> Thanks
> - Will Darby
> 
> 

-- 
Tammo van Lessen - http://www.taval.de