Hi,
trying to throw a fault inside a process it appears that it is never caught
even with a "catchAll" activity.
This very basic process shows the problem :
<?xml version="1.0" encoding="utf-8" ?>
<wsbpel:process
name="testerProcess"
xmlns:wsbpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"
targetNamespace="http://services"
xmlns:tns="http://services"
>
<wsbpel:import importType="http://schemas.xmlsoap.org/wsdl/"
location="tester.wsdl" namespace="http://services" />
<wsbpel:partnerLinks>
<wsbpel:partnerLink name="linkToClient"
partnerLinkType="tns:testerLinkType" myRole="tester"/>
</wsbpel:partnerLinks>
<wsbpel:variables>
<wsbpel:variable name="input"
messageType="tns:testInput" />
<wsbpel:variable name="output"
messageType="tns:testOutput" />
</wsbpel:variables>
<wsbpel:faultHandlers>
<!--<wsbpel:catch faultName="fault0">
<wsbpel:assign>
<wsbpel:copy>
<wsbpel:from>'fault0
caught'</wsbpel:from>
<wsbpel:to>$output.result</wsbpel:to>
</wsbpel:copy>
</wsbpel:assign>
<wsbpel:reply partnerLink="linkToClient"
portType="tns:testerPortType"
operation="test" variable="output" />
</wsbpel:catch>
<wsbpel:catch faultName="fault1">
<wsbpel:assign>
<wsbpel:copy>
<wsbpel:from>'fault1
caught'</wsbpel:from>
<wsbpel:to>$output.result</wsbpel:to>
</wsbpel:copy>
</wsbpel:assign>
<wsbpel:reply partnerLink="linkToClient"
portType="tns:testerPortType"
operation="test" variable="output" />
</wsbpel:catch>-->
<wsbpel:catchAll>
<wsbpel:assign>
<wsbpel:copy>
<wsbpel:from>'fault
caught'</wsbpel:from>
<wsbpel:to>$output.result</wsbpel:to>
</wsbpel:copy>
</wsbpel:assign>
<wsbpel:reply partnerLink="linkToClient"
portType="tns:testerPortType"
operation="test" variable="output" />
</wsbpel:catchAll>
</wsbpel:faultHandlers>
<wsbpel:sequence>
<wsbpel:receive createInstance="yes" partnerLink="linkToClient"
portType="tns:testerPortType" operation="test" variable="input" />
<wsbpel:if>
<wsbpel:condition>string($input.data) =
'0'</wsbpel:condition>
<wsbpel:then>
<wsbpel:throw faultName="fault0" />
</wsbpel:then>
<wsbpel:elseif>
<wsbpel:condition>string($input.data) =
'1'</wsbpel:condition>
<wsbpel:throw faultName="fault1" />
</wsbpel:elseif>
<wsbpel:else>
<!--<wsbpel:throw faultName="fault2" />-->
<wsbpel:empty/>
</wsbpel:else>
</wsbpel:if>
<wsbpel:assign>
<wsbpel:copy>
<wsbpel:from>'Test'</wsbpel:from>
<wsbpel:to>$output.result</wsbpel:to>
</wsbpel:copy>
</wsbpel:assign>
<wsbpel:reply partnerLink="linkToClient"
portType="tns:testerPortType"
operation="test" variable="output" />
</wsbpel:sequence>
</wsbpel:process>
When invoked with a value that provoke an exception, that is "0" and "1",
nothing is replied to the client and the process seems to do nothing.
The behavior is normal when invoked with other values, that is the value
'Test' is returned.
The problem comes, of course, from the misuse of the "throw...catch"
feature, particularly from the non definition of the faults.
So two questions :
Is there a way to throw anonymous, that is non defined, fault the way it is
done in this process ?
If not, how to properly use the WS-BPEL throw-catch construct, particularly
how to declare the faults which names will go into "faultName" attribute of
the "throw" and "catch" ?
Thanks by advance for your help.
--
View this message in context:
http://www.nabble.com/How-to-throw-an-anonymous-fault---tp19132119p19132119.html
Sent from the Apache Ode User mailing list archive at Nabble.com.