ode-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From George <george.n...@gmx.net>
Subject Capture Soap Fault in Invoke
Date Thu, 11 Aug 2011 11:04:58 GMT
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



Mime
View raw message