Monday, December 24, 2007

sdo webservices in soa suite 11g

In the jdeveloper 11g tp3 you can configure a soa project where you can use sdo webservice as a reference adapter. Too bad this is not working (at runtime) in TP3 but this blog will show you how you can use sdo web services in a bpel process and it gives an overview how soa suite 11g works.
First what is SDO ? This is a technology which is developed by IBM, SAP, BEA, Oracle etc. SDO or Service Data Objects is designed to simplify and unify the way in which applications handle data. Oracle made it very easy with adf bc (bc4j) to make sdo webservices. You only have to edit the application module, Go the service definitions link and enable support for service definitions. Select the viewobjects and the operations you want to use. Deploy this to the embedded oc4j and we have our sdo webservice.

In this example I used the customer table of the oe sample schema. In the viewobject of this customer table I had the remove the following attributes cust_address, phone_numbers, cust_geo_location because these types are not supported by sdo.

We are ready to make a soa 11g project. Create a new soa project and open the composite.xml Now drag the bpel process from the component windows to the components area of the composite.xml. Make sure you check create composite service.

Now we can add the sdo webservice. Drag the sdo webservice to the reference area of the composite.xml. Now fill in the wdsl entry of our customer sdo web service and select the operation. Now drag a line from the bpel proces to the sdo web service, so we can use it in the bpel process
This is a bit different as in 10.1.3. In the composite.xml we define our adapters and which adapters the bpel can use ( the line between the components) . Now we complete the bpel process by clicking on the bpel process in the composite.xml. Here we add an invoke service to call our sdo webservice and in this we select the right operation getCustomerView.
We add some assign activities to fill the input variable of the sdo web service and one to assign the output of the ws to the output of the bpel.
Run the composite.xml and go the following url http://localhost:8988/soa-infra/ to test our bpel web service. This goes wrong because in TP3 the runtime support of sdo is not supported in this release but let's look at the soa suite console why it goes wrong.

Now we can look at the details

In the TP4 release I will retest it and update this blog


  1. Hi

    can you tell me a way to catch SDO faults ? I'm not hable to cathc faults that arrises from DB incoherence from activities that deal with SDO WS inside a SCOPE... I have already tryed also with Faulthandlind FRamework..


  2. Hi,

    Do you get adapter failure or a soap fault. Or nothing


  3. Hi Edwin.

    Thanks for your reply. Actually I get errors when I commit the operations for update, create or delete an entity using entity varibles. The errors are discribed in the activity where the operation is performed. For example, if I try to create a new record withou fulfilling a mandatory field in the DB.

    The problem is that even a catchAll defined on the scope where the operations are taking place don´t catch the error.

    I have already implemented also the Faulthandling Framework, but with the same result.

    Thank you, and BTW congratulations for your blog !

  4. Hi,

    Thanks and maybe it is a bpel entity issue and can you replace it with a ws and partnerlink.

    The Faulthandling Framework should be the first to capture the error.

    It looks like a bug and the sdo service should throw a soap fault.


  5. Hi Edwin,

    I am dealing with a scenario where i have to interact with some web service which entertain XML argument input and return XML output only,(my service is on weblogic and the service which i am trying to call is on glassfish)
    example:- my BPEL's inputs and outputs corresponding webservice inputs and outputs are like.

    @ BPEL input and outputs
    *Input to my BPEL-->>
    request ---username type="string"
    ---password type="string"

    *output from my BPEL-->>
    response ---status type= "string"
    ---code type= "string"

    @ the webservice which i am trying to call: input and outputs



    the reference side have only one input i.e input XML.. and also after successful login it should give out the response in such a format so that my BPEL can interact with that so until and unless i did not found a solution to convert my input to the BPEL (input xsd) to XML i will not able to do so .I have tried the following -- Using the XPath function-- ora:parseEscapedXML() to take an XML string and convert it to DOM format for processing in BPEL but getting Xpath error. Please Please help me out if you have any solutions.

    To escape the above deadlock we place a wrapper layer between both the service my services are running on weblogic and the service which i am trying to call is on glassfish ,with this approach we are Successfully hitting the service but not getting any response but instead getting error-----"error getting response; timed in weblogic" please help me out if you have any solutions..

    Thanks and Regards
    Abhishek Ajral

  6. Hi,

    Can you try to escape or cdata the xml in XSLT
    for the second question maybe add the jdeveloper proxy analyzer in between and follow all the request and responses