xavier async callback_fault

13
Return a fault from an Asynchronous Web Service In an asynchronous web service we can't return a soap fault like a synchronous service but that does not mean you can't report back the fault to the calling asynchronous process. basically you got three options. Off course handle the fault in the error hospital and give back the response. In the response message you can add a section ( a XSD choice with success and fault section) which can be used for faults. Do a callback to a common fault operation of the calling process. This can be a JMS message with the messageId/correlationId or a Web Service invocation where we use the correlation of BPEL to match the fault message with the right process. In this blogpost I will show how to implement the last two options in Oracle BPEL. First we start with returning the fault in a response message. For this I added a status element to the response and a choice for a success and a fault .

Upload: xavier-john

Post on 15-Apr-2017

204 views

Category:

Software


0 download

TRANSCRIPT

Page 1: Xavier async callback_fault

Return a fault from an Asynchronous Web Service

In an asynchronous web service we can't return a soap fault like a synchronous service but that does not mean you can't report back the fault to the calling asynchronous process.

basically you got three options.

Off course handle the fault in the error hospital and give back the response.  In the response message you can add a section ( a XSD choice with success and fault

section) which can be used for faults. Do a callback to a common fault operation of the calling process. This can be a JMS

message with the messageId/correlationId or a Web Service invocation where we use the correlation of BPEL to match the fault message with the right process. 

In this blogpost I will show how to implement the last two options in Oracle BPEL.

First we start with returning the fault in a response message.

For this I added a status element to the response and a choice for a success and a fault .

In the catch section you can also invoke the callback response and in the Assign activity you can fill the fault section of the response message.

Page 2: Xavier async callback_fault

Do a fault callback to the calling process,  for this we need to do the following.

Create an Asynchronous BPEL process.

Define a fault response schema. The EmployeeId element is necessary, we need this for the correlation of the BPEL processes.

Then make a new WSDL with the fault callback operation and add a fake endpoint. ( we will override this endpoint from BPEL, because we don't know the endpoint of the calling process).

Page 3: Xavier async callback_fault

Add a FaultCallback reference web service based on this WSDL and add a wire to the BPEL process.

In the BPEL receive activity, we need to capture the fault callback url. We can optional use

Page 4: Xavier async callback_fault

this for the fault response endpoint.  Go the properties tab and capture the value of the faultToAddress property. Put the value in the faultCallBackUrl variable.

In the Catch section of the BPEL process we can invoke the fault reference service. Off course use an assign to add the EmployeeId and provide a fault message.

Open the fault invoke activity and go to the properties tab.

Page 5: Xavier async callback_fault

We need to set the endpointURI property with the faultCallBackUrl variable value.

That is all for the Asynchronous Service.

Next step is to use this Asynchronous Fault Service in an other asynchronous BPEL process.

We need to make a WSDL ( contract first ) with a portType which also contains the fault operation, this must match with the reference WSDL of the Asynchronous Fault Process. So operationName, Message and namespace must match.

Page 6: Xavier async callback_fault

Create a new BPEL process which is based on this WSDL ( expose this BPEL as a service ) and also add wire the Asynchronous Fault process.

This is the process with InvokeEmployee activity which calls the Asynchronous Service.

Page 7: Xavier async callback_fault

Open this invoke activity and go to the properties tab where we set the faultToAddress property. This is the endpoint of this BPEL process and will be used for the fault callback.

Page 8: Xavier async callback_fault

After the invoke we need to use a pick activity and add an extra onMessage to the pick activity.First OnMessage will be used for the normal callback situation.

The second will be used for the fault Response.

The last step is to setup correlation in this BPEL for the returning fault message.

on the receive add a correlation set and initiate this ( I got a NPE when I tried to set it on the invoke ). The Set is based on the employeeId element.

Page 9: Xavier async callback_fault

Add two Property Aliases , first is based on the employeeId element of the Fault Message and second is the employeeId of the request message.

Page 10: Xavier async callback_fault

On the fault OnMessage we need to add the same correlation set and this time we don't need to initiate it.

Page 11: Xavier async callback_fault

If everything is Ok we will see the following in the Enterprise Manager.

on the invoke we set the faultToAddress, the normal response OnMessage is cancelled and the fault OnMessage gets a response with the fault message.

On github you can download this

Page 12: Xavier async callback_fault

example https://github.com/biemond/soa11g_examples/tree/master/AsynchronousFaultHandling

[email protected]@gmail.com