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" 
  >

  <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


Reply via email to