cancel
Showing results for 
Search instead for 
Did you mean: 

Catching Soap Fault in BPM

Former Member
0 Kudos

Hi All,

We have a synchronous send step in BPM inside a block which throws exception.Right now we have two kinds of exception that occur.One is due to system unavailability and the other is due to the SOAP Fault response from the Supplier.

Is there any means to distinguish the SOAP Fault error from a system error within the BPM?

Thanks,

Sowmya

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

Hi,

Just to clarify.

From within a BPM, if you make a synchronous call, and there is a fault message in the signature of that call, you are able to define an exception branch to handle that fault separately from a system fault. Unfortunately what SAP does not provide, is a container for the fault message, so while you know that the fault occurred, you do not have access to the details of the fault. SAP also does not provide the ability for the BPM itself to return a fault message.

Stephen

Former Member
0 Kudos

Hi Shabarish,

We are handling exception(System Error) inside the BPM in the same way as you have mentioned.But the issue is that the SOAP Fault response we are receiving from the Supplier is also treated as a system error because of the missing <Detail> segment and hence its handled in the same way like a time out error which should not be.

Hence would like to get inputs on how can this SOAP Fault response can be distinguished from the normal system errors like time out.

Thanks,

Sowmya

Former Member
0 Kudos

FYI,

I have raised this issue with SAP i.e. a synchronous call from within a BPM that returns a fault does not return the fault message. The official response from SAP is that this is working as designed and that the content of the fault mesage is not available. if you look at the BPEL code you will notice that there is no "vaultVariable" attribute in the catch tag. I am currently trying to convince SAP that this is bug not a feature.

Stephen

Former Member
0 Kudos

Hi Stephen,

Thanks for your inputs.

Do you mean to say that it is not possible to catch soap-faults separately in BPM if the fault message is of type System Error?

The Soap Fault message that we get from the Supplier does not have the <detail> element in it.The fault message looks like:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>

<soap:Fault>

<faultcode>soap:000000</faultcode>

<faultstring>java.lang.NullPointerException</faultstring>

</soap:Fault>

</soap:Body>

</soap:Envelope>

and hence it is treated in the same way a normal time out is handled.(System Error)

Please share your valuable inputs on the same.

Thanks,

Sowmya

Former Member
0 Kudos

Hi Sowmya,

You can catch the SOAP fault message in the response by adding this parameterl -

"XMBWS.NoSOAPIgnoreStatusCode = true" in the SOAP channel -> module tab -> Module configuration.

Module Key will be "soap".

In the IP, you can put in a switch condition and check the response for //*[local-name()='faultcode'], if true, it means this is your fault message in the response. You can then handle this accordingly.

Hope this helps.

Regards,

Neetesh

Former Member
0 Kudos

Hi Sabarish,

Thanks for your reply.I was referring to the same blog.In that blog,there is a statement which says "in problem cases, the web service will return a SOAP fault message which will either result in a system error message or an application error message in XI and if its a system error there are not many options to handle the same and only application error messages can be caught and handled".

As per my understanding from the blog,if the web service response has to contain an application error message it must populate the "<detail>" tag in the soap fault message.

However the fault response which we receive looks like this.

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Body>

<soap:Fault>

<faultcode>soap:000000</faultcode>

<faultstring>java.lang.NullPointerException</faultstring>

</soap:Fault>

</soap:Body>

</soap:Envelope>

Kindly guide me if we can capture and handle this kind of soap fault messages.

Thanks,

Sowmya

Shabarish_Nair
Active Contributor
0 Kudos

if there is an application error, the fault message will be populated and the interface mapping will handle it and you can send the response back to the sender.

in case of a system error, do exception handling for the sync send in BPM.

If system error kicks in, you can handle the exception in the exception branch and take the required action of canceling the process, sending an alert or even creating a message to send back to the sender

Shabarish_Nair
Active Contributor
0 Kudos

if you can do the synchronous interface mapping and also involve the fault message mapping, then you can easily handle this

/people/jin.shin/blog/2007/05/21/handling-web-service-soap-fault-responses-in-sap-netweaver-xi