0bj3ct
0bj3ct

Reputation: 1490

Oracle Service Bus multiple operations inside exposed SOAP service

Currently I am developing a ws with OSB using JDeveloper 11. I have a simple web service, which calls an external SOAP service.

My composite.xml file:

enter image description here

  1. Operations of my BPEL Soap service

  2. Operations of remote SOAP Service

  3. BPEL Component

I have few questions regarding the current development strategy. How shall I add new operations to my BPEL SOAP? I added a new method (getCompanyDetails()) by editing ApusBPELProcess.xsd (added new request and response types) and ApusBPELProcess.wsdl (added new operation, message and etc). Is this the correct way for adding new operations?

Now I can call only one method of the remote SOAP service by using an "Invoke" component from BPEL constructs.

My BPEL design:

enter image description here

How can I call bind a method from my BPEL SOap (1) to a method from remote service (2) ? For example: when client calls method process from my BPEL Soap (1), I want to do some validation on input parameters and then call getServiceCompanies from remote SOAP (2). And so when client calls another method from BPEL Soap (1) I want to call some other methods on remote SOAP (2).

Will be very thankful if someone can show me a diagram, with required components. Because I read about "Mediator" components, but I don't know how to use them in my current situation.

Thanks in advance.

Upvotes: 0

Views: 1439

Answers (2)

0bj3ct
0bj3ct

Reputation: 1490

I found a solution with Mediator component. Maybe it will help someone.

Ok, I added a Mediator component between my exposed service and remote service. Mediator component will do request routing and data transformation between these two services. For each method in my exposed service I added a BPEL process to the other endpoint of Mediator (I will do some method specific validation/other logic inside these BPEL processes).

My final composite.xml:

  1. Methods of my exposed service
  2. Mediator
  3. The remote service what I call

enter image description here

Inside Mediator component I do routing and transformation. For each method of my exposed service (1) I have a routing rule in Mediator (2).

Mediator component rules:

4a, 4b - Methods of my exposed service 4c - button for adding new routing rule 4d - button for adding transformation rule (generally you will have a pair of transformation rules for a method - request/response)

enter image description here

Transformation files are .xsl files that do information convertion between two endpoints.

My .xsl files:

enter image description here

Content of a .xsl file:

Here I am doing iteration through the response data (for-each component).

enter image description here

And finally inside of each BPEL process I have an "Invoke" component (5) which calls the appropriate method on the remote service.

enter image description here

Hope it will someone. Good luck!

Upvotes: 0

DivyaJ
DivyaJ

Reputation: 116

One option is, You can use Pick activity that can have multiple onMessage branches for each operation exposed by your BPEL service. Similarly, Invoke activity has an option to select the operation of the Remote SOAP service that you need to call. So your composite would look like Pick activity with an OnMessage branch with BPELoperation1 selected, then logic to do validation and then invoke with remoteoperation1 selcted.And another onMEssage branch with BPELoperation2 selected, logic to do validations and invoke with remoteoperation2 selected.

Upvotes: 2

Related Questions