26.3.09

Adding ODI Public Services to JDeveloper Service Explorer

Oracle Data Integrator 10.1.3.5 has now a simple (static) WSIL definition file that can be utilized in SOA development. How this should show up in practical SOA development, you should see the ODI public web service as a service in the "Service Explorer" window in JDeveloper.

This is what I want:

image

In order to get this working requires couple of manual/trivial configuration steps. First of all I assume that you have deployed the axis2 container to e.g. OracleAS or some other servlet/Java EE container. In my installation I've created a dedicated "odi" OC4J instance for ODI services. Axis2 shows up in my installation using http://localhost:8889/axis2.

Also assumed is that you use ODI 10.1.3.5 that has the required WSIL file. You could use also earlier versions of ODI, just by creating the WSIL file shown in this article.

Step 1: Copy OdiInvoke.wsil file from ODI to axis2 directory

The wanted file is located in $ODIHOME/oracledi/lib/OdiInvoke.wsil. You should copy this file to axis2 web application directory.

In my installation I copied it under this kind of directory:

D:\product\10.1.3.1\soasuite\j2ee\odi\applications\axis2\axis2-1_2\axis2-web

In your installation you might use SOA suite's OC4J for deployment, in which case you should change the "j2ee\odi" part to "j2ee\home" or "j2ee\oc4j_soa".

Step 2: Fix the OdiInvoke.wsil

There is a small issue in the WSDL location that prevents the WSDL path working correctly under OC4J/axis2.

Edit OdiInvoke.wsil, change the WSDL location to match your axis2 deployment context.

<?xml version="1.0" encoding="UTF-8"?>
<inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"
    xmlns:wsilwsdl="http://schemas.xmlsoap.org/ws/2001/10/inspection/wsdl/"
    xmlns:wsiluddi="http://schemas.xmlsoap.org/ws/2001/10/inspection/uddi/"
    xmlns:uddi="urn:uddi-org:api">
    <service>
        <abstract xml:lang="en-US">
            Oracle Data Integrator Public Web Services
        </abstract>
        <description referencedNamespace="http://schemas.xmlsoap.org/wsdl/"
            location="./services/OdiInvoke?wsdl">
            <wsilwsdl:reference endpointPresent="true">
                <wsilwsdl:referencedService xmlns:impl="xmlns.oracle.com/odi/OdiInvoke/">
                    impl:OdiInvoke</wsilwsdl:referencedService>
            </wsilwsdl:reference>
        </description>
    </service>
</inspection>

to

<?xml version="1.0" encoding="UTF-8"?>
<inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"
    xmlns:wsilwsdl="http://schemas.xmlsoap.org/ws/2001/10/inspection/wsdl/"
    xmlns:wsiluddi="http://schemas.xmlsoap.org/ws/2001/10/inspection/uddi/"
    xmlns:uddi="urn:uddi-org:api">
    <service>
        <abstract xml:lang="en-US">
            Oracle Data Integrator Public Web Services
        </abstract>
        <description referencedNamespace="http://schemas.xmlsoap.org/wsdl/"
            location="/axis2/services/OdiInvoke?wsdl">
            <wsilwsdl:reference endpointPresent="true">
                <wsilwsdl:referencedService xmlns:impl="xmlns.oracle.com/odi/OdiInvoke/">
                    impl:OdiInvoke</wsilwsdl:referencedService>
            </wsilwsdl:reference>
        </description>
    </service>
</inspection>

Step 3: Configure JDeveloper 10.1.3.4 to show local WSIL registry

Edit

$JDEVHOME\integration\bpm\designer\config\serviceexplorer_plugin.xml

Uncomment:

<!-- Commenting WSIL as xmethods wsil is no more valid (accessible)
    <ExternalSource name="WSIL" class="oracle.tip.tools.ide.pm.datasources.wsil.WSILDataSourceContainer" enable="true">
    </ExternalSource>
-->

 

Step 4: Create inspection.wsil file for JDeveloper local WSIL registry

JDeveloper 10.1.3.4 no longer has inspection.wsil file shipped with it. You must create it manually to the same directory where serviceexplorer_plugin.xml is located.

Create file

$JDEVHOME\integration\bpm\designer\config\inspection.wsil

Contents of the file (please change the OdiInvoke.wsil URL to match your environment):

<?xml version="1.0"?>
<inspection xmlns="http://schemas.xmlsoap.org/ws/2001/10/inspection/"
            xmlns:wsilwsdl="http://schemas.xmlsoap.org/ws/2001/10/inspection/wsdl/">

<link referencedNamespace="http://schemas.xmlsoap.org/ws/2001/10/inspection/"
            location="http://localhost:8889/axis2/axis2-web/OdiInvoke.wsil">
        <abstract>Oracle Data Integrator Public Web Service</abstract>
</link>
</inspection>

Step 5: Restart JDeveloper 10.1.3.x and test

Now you should have everything ready for testing. Service Explorer should have a new folder called "Local Registry" and one subfolder called "Oracle Data Integrator Public Web Service" underneath it. The name of the folder can be changed just by editing the inspection.wsil file (created in step 4).

Now to use it, you could create a SOAP service in OESB or partner link in BPEL. Recommended way is to create a routing service to virtualize the ODI public web service details. My recommendation would be to create a well defined public routing WSDL with strongly typed payload, instead of generic ODI web service API.

Have fun!

1 comment:

veeresh said...

Nice Artical.I am working on
SOA11g and ODI. My requirement is to call ODI webservice from SOA composite.

Can you provide the steps to acheive this. 1) how to expose ODI as webservice on weblogic
2)is weblogic and SOA installed on same server?