On 11/08/2011 13:34, Waruna Ranasinghe wrote:
Hi Jorge,
On 11 August 2011 23:04, George<[email protected]> wrote:
Hi all,
I'm trying to capture a custom Soap Fault returned from an invoke activity.
I have successfully capture the exceptions lauched when the remote service
is unavailable by using<ext:failureHandling>. However now the problem is
different.
My remote service is a function like this:
public void sendMyServiceException(int i) throws MyServiceException
When I call it using SoapUI I get the exception soap xml code:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/
">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>unknown</faultstring>
<detail>
<ns:ServiceEmulatorMyServiceException
xmlns:ns="http://serviceemulator.mydomain.com">
<MyServiceException xsi:type="ax21:MyServiceException"
xmlns="http://serviceemulator.mydomain.com"
xmlns:ax21="http://serviceemulator.mydomain.com/xsd"
xmlns:ax23="http://io.java/xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ax21:code>1</ax21:code>
<ax21:subcode>2</ax21:subcode>
</MyServiceException>
</ns:ServiceEmulatorMyServiceException>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
However in my BPEL process I'm not able to see it. The BPEL code for this
part is:
<bpel:invoke name="InvokeException" partnerLink="ServiceEmulatorPL"
operation="sendMyServiceException"
portType="srvemu:ServiceEmulatorPortType"
inputVariable="ServiceEmulatorPLSendMyServiceExceptionRequest"
>
According the configuration of the above invoke activity, the operation
"sendMyServiceException" is a one-way (in-only) operation. Therefore the
BPEL process does not expect any response or even and soap fault as a
response.
Just I was checking that before receiving your answer ;) and it seems if
I set the remote method to return a value there is no problem and the
exception is caught.
Could you please give me some hint on how to access the values in the
exception an the type of exception?
TA
Jorge
Thanks,
Waruna
<ext:failureHandling xmlns:ext="http://ode.apache.org/activityRecovery">
<ext:faultOnFailure>false</ext:faultOnFailure>
</ext:failureHandling>
<bpel:catchAll>
<bpel:sequence>
<!-- Assign data to variable output from invoke PingPongPLResponse -->
<bpel:assign validate="no" name="AssignIteratorInCaseOfError">
<bpel:copy>
<bpel:from>
<bpel:literal>0</bpel:literal>
</bpel:from>
<bpel:to>
$iterator
</bpel:to>
</bpel:copy>
</bpel:assign>
</bpel:sequence>
</bpel:catchAll>
</bpel:invoke>
I use catchAll to capture everything but I don't get any error, that is,
the variable $iterator is not modified and still stores the same value as
the one assigned before. I have tried with faultOnFailure set to true and
false and no difference.
When analizing the logs it seems that after ODE engine makes the call to
the remote WS it directly returns without displaying anything on the log
about the soap fault. When using a IN/OUT call I get both the request and
response on a correct execution displayed on the log, but in this case only
with IN and Exception, I only get the request.
Any help. I would really appreaciate it.
TA
Jorge