4 Replies Latest reply: Jul 18, 2012 7:39 PM by 779146 RSS

    AIA Error Handling - Issue with binding Fault

    779146
      Hi,

      I am working with AIA 11g R1 PS2

      Scenario: BPELProcess1 invokes BPELProcess2. In BPELProcess1, I have catch blocks for binding & remoteFault and catchAll.

      I retired BPELProcess2 and tried testing BPELProcess1.

      Query 1: Ideally, BPELProcess1 should get faulted throwing bindingFault because its not able to bind to partner link but in our environment, its throwing remoteFault.

      In 10g, it throws binding fault when the partner link is not accessible. If there is somme issue inside partner link process, it throws remoteFault.
           
      So in 11g when does the control goto binding fault catch block ?

      Query 2: In 10g, in case of any SystemFault, control goes to catch block of that Fault and then to catchAll where AIAAsyncErrorHandlingBPELProcess gets invoked
      In our 11g environments, if some SystemFault occurs Eg: remoteFault, control is going to catch block of remoteFault but then its not going to catchAll.

      I tested in two environments, we are facing same issue.

      Here is fautlHandlers code:
      ---------------------
      <faultHandlers>
      <catch faultName="bpelx:remoteFault" faultVariable="SysFaultVar">
      <sequence name="SequenceRemoteFault">
      <throw name="ReThrow_RemoteFault" faultName="bpelx:remoteFault"
      faultVariable="SysFaultVar"/>

      </sequence>
      </catch>
      <catch faultName="bpelx:bindingFault" faultVariable="SysFaultVar">
      <sequence name="SequenceBindingFault">
      <throw name="ReThrow_BindingFault" faultName="bpelx:bindingFault"
      faultVariable="SysFaultVar"/>
      </sequence>
      </catch>
      <catchAll>
      <sequence name="SequenceErrorHandling">
      <assign name="Assign_AIAAsyncErrorHandlingBPELProcessRequestMessage">
      <copy>
      <from expression="ora:processXSLT('xsl/EBM_to_Fault.xsl',bpws:getVariableData('inputVariable','payload'))"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"/>
      </copy>
      <copy>
      <from variable="RuntimeFaultMessage" part="code"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultMessage/corecom:Code"/>
      </copy>
      <copy>
      <from variable="RuntimeFaultMessage" part="summary"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultMessage/corecom:Text"/>
      </copy>
      <copy>
      <from expression="xpath20:current-dateTime()"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:ReportingDateTime"/>
      </copy>
      <copy>
      <from expression="ora:getProcessId()"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultingService/corecom:ID"/>
      </copy>
      <copy>
      <from expression="'BPEL'"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultingService/corecom:ImplementationCode"/>
      </copy>
      <copy>
      <from expression="ora:getInstanceId()"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultingService/corecom:InstanceID"/>
      </copy>
      <copy>
      <from expression="ora:getECID()"/>
      <to variable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"
      part="FaultMessage"
      query="/corecom:Fault/corecom:FaultNotification/corecom:FaultingService/corecom:ExecutionContextID"/>
      </copy>
      </assign>
      <invoke name="InvokeAIAAsyncErrorHandlingBPELProcessStartInitiate"
      partnerLink="AIAAsyncErrorHandlingBPELProcess"
      portType="aiaeh:AIAAsyncErrorHandlingBPELProcess"
      operation="initiate"
      inputVariable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"/>
      <throw name="Throw_Fault" faultName="client:Fault"
      faultVariable="AIAAsyncErrorHandlingBPELProcess_initiate_InputVariable"/>
      </sequence>
      </catchAll>
      </faultHandlers>
      ---------------------

      Thanks,
      Hema
        • 1. Re: AIA Error Handling - Issue with binding Fault
          617580
          Query 1:
          What is your test scenario? Have you just retired a service that is being consumed ? Services that are retired are still reachable. However, invocation of such a service will fail. Hence you would get a remote fault, instead of a binding fault.

          When the Service being consumed is either not available or undeployed, then it's WSDL cannot be loaded. In this scenario, you would get a binding fault.

          Query 2: This behaviour is as expected. The catch activities in the faulthandler work as a chained if-else stmnts.
          • 2. Re: AIA Error Handling - Issue with binding Fault
            779146
            Hi Vijay,

            Initially I had retired BPELProcess2 and tested BPELProcess1. It gave remoteFault.

            As per you suggestion, I undeployed BPELProcess2 and tested BPELProcess1, its still giving remoteFault instead of bindingFault

            Here is the fault:
            ---------------------------
            Invoke_BPELProcess2 (faulted)
            Nov 22, 2010 11:39:38 AM Faulted while invoking operation "process" on provider "BPELProcess2". Faulted while invoking operation "process" on provider "BPELProcess2".
            <payload>
            <messages>
            <input>
            <Invoke_BPELProcess2_process_InputVariable>
            <part name="payload">
            <process>
            <input>test</input>
            </process>
            </part>
            </Invoke_BPELProcess2_process_InputVariable>
            </input>
            <fault>
            <bpelFault>
            <faultType>0</faultType>
            <remoteFault>
            <part name="summary">
            <summary>oracle.fabric.common.FabricInvocationException: Unable to access the following endpoint(s): http://<hostname>:8001/soa-infra/services/default/TestBPELProcess2/bpelprocess2_client_ep</summary>
            </part>
            <part name="detail">
            <detail>Unable to access the following endpoint(s): http://<hostname>:8001/soa-infra/services/default/TestBPELProcess2/bpelprocess2_client_ep</detail>
            </part>
            <part name="code">
            <code>503</code>
            </part>
            </remoteFault>
            </bpelFault>
            </fault>
            <faultType>
            <message>0</message>
            </faultType>
            </messages>
            ---------------------------
            • 3. Re: AIA Error Handling - Issue with binding Fault
              user12841202
              Hi Hema,
              Were you able to solve this issue ? I am facing the same problem.
              • 4. Re: AIA Error Handling - Issue with binding Fault
                779146
                Hi,

                As per my understanding and test cases I executed, there are some changes that I observed in 11g

                1. Whatever is the case, callee is undeployed/retired/shutdown, caller is getting remoteFault
                2. When an exception is rethrown in a Catch branch and CatchAll branch is present on the same level, the exception is propagated to the higher level and not caught by the CatchAll branch. This seems like major change in 11g compared to 10g

                Thanks,
                Hema