web-servicessoapsoajdeveloperoracle-service-bus

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.


Solution

  • 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!