The Integrated SOA Gateway supported a few custom interface types. In this post, I will be working on the Java Bean Service. To test this, I’m going to build a very simple custom interface that returns a string “Hello World”. Later on, I can probably try something more complex. But let's stick with this for now.
Before we proceed, let me give you a bit of information about our instance.
Oracle E-Business Suite Release 12.1.3
Java 1.6.0_21
JDBC Driver 11.2.0.1.0
Database Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
Operating System Linux 3.10.0-229.20.1.el7.x86_64
Without further ado, here's my Java code.
HelloWorld.java
package oracle.apps.per.sample.service;
/**
* A sample class to demonstrate how Java API can use the ISG REST framework. This class provides
* methods to return string Hello World
* @rep:scope public
* @rep:product PER
* @rep:displayname Hello World
* @rep:category BUSINESS_ENTITY HR_USER_HOOK
* @rep:category IREP_CLASS_SUBTYPE JAVA_BEAN_SERVICES
*/
public class HelloWorld {
public HelloWorld() {
}
/**
*
* This method returns a list of direct reports of the requesting user.
*
* @return Hello World string
* @rep:scope public
* @rep:displayname Get Hello World
* @rep:httpverb get
*/
public String getHelloWorld() {
return "Hello World";
}
}
Take note of the annotations on class level and method level as some of these are required. More information on annotations here.
Next is we need to transfer this java file to the appropriate folder in the server. In my case, I will transfer this to $JAVA_TOP/oracle/apps/per/sample/service.

Now we need to connect to the server via ssh. Set JAVA_HOME to $IAS_ORACLE_HOME/appsutil/jdk if not already set. Lastly, make sure you have the appropriate permissions to execute the following commands:
Compile the java file using the javac command.
javac $JAVA_TOP/oracle/apps/per/sample/service/HelloWorld.java

Generate the iLDT file using the irep_parser.pl script.
[las@server ~]$ $IAS_ORACLE_HOME/perl/bin/perl $FND_TOP/bin/irep_parser.pl -g -v -username=sysadmin per:patch/115/java:HelloWorld.java:12.1=$JAVA_TOP/oracle/apps/per/sample/service/HelloWorld.java
If successful, you should see something similar to the screen shot below.

You should also notice that an Integration Repository loader file (ildt) was created as shown above. This file will contain the metadata for the Java Bean Service object.
IMPORTANT NOTE: For succeeding changes, you need to increment the version when running the irep_parser.pl script. In the example above, I used version 12.1. If I need to make changes to the Java code, I will again need to generated the iLDT file but in doing so, I need to use version 12.2 or 12.1.1 for the changes to take effect.
Moving on, here's the content of the iLDT file for reference.
HelloWorld_java.ildt
# $Header: HelloWorld_java.ildt 12.1 2018/12/04 13:54:23 sysadmin $
# dbdrv: sql fnd patch/115/sql afdlfsub.sql none none none sqlplus \
# dbdrv: &phase=dat+10 checkfile:~PROD:~PATH:~FILE &un_apps &pw_apps per \
# dbdrv: patch/115/java HelloWorld_java.ildt 12.1 FND FNDDLFLD NORMAL \
# dbdrv: ARU2ILDT 50
LANGUAGE = "US"
LDRCONFIG = "wfirep.lct 120.7"
# Generated by the IRep Parser, 12.0.0
# -- Begin Entity Definitions --
DEFINE IREP_OBJECT
KEY OBJECT_NAME VARCHAR2(430)
KEY DEST_TABLE VARCHAR2(1)
CTX OWNER VARCHAR2(4000)
BASE API_NAME VARCHAR2(400)
BASE OBJ_TYPE VARCHAR2(30)
BASE SERVICEABLE VARCHAR2(1)
BASE CLASS_RESOURCE_PATH VARCHAR2(240)
BASE PRODUCT VARCHAR2(8)
BASE IMP_NAME VARCHAR2(400)
BASE COMPATABILITY VARCHAR2(1)
BASE SCOPE VARCHAR2(30)
BASE LIFECYCLE VARCHAR2(30)
BASE SOURCE_FILE_PRODUCT VARCHAR2(8)
BASE SOURCE_FILE_PATH VARCHAR2(100)
BASE SOURCE_FILE_NAME VARCHAR2(36)
BASE SOURCE_FILE_VERSION VARCHAR2(150)
BASE DESCRIPTION VARCHAR2(32000)
BASE STANDARD VARCHAR2(30)
BASE STANDARD_VERSION VARCHAR2(30)
BASE STANDARD_SPEC VARCHAR2(240)
TRANS DISPNAME VARCHAR2(240)
TRANS SHORTDISC VARCHAR2(2000)
BASE TIMESTAMP VARCHAR2(11)
BASE OI_FLAG VARCHAR2(1)
BASE MAPCODE VARCHAR2(255)
BASE PARSER_VERSION VARCHAR2(80)
BASE SDO_DEF_CLASS VARCHAR2(400)
BASE SDO_CLASS_NAME VARCHAR2(400)
BASE SDO_IS_FILTER VARCHAR2(1)
BASE SDO_FILTER_REQUIRED VARCHAR2(1)
BASE SDO_IS_EXPRESSION VARCHAR2(1)
BASE SB_INTERFACE_CLASS VARCHAR2(400)
BASE CRAWL_CRAWLABLE VARCHAR2(1)
BASE CRAWL_VISIBILITY_LEVEL VARCHAR2(8)
BASE CRAWL_SEARCH_PLUGIN VARCHAR2(4000)
BASE CRAWL_UI_FUNCTION VARCHAR2(240)
BASE CRAWL_CHANGE_EVENT_NAME VARCHAR2(4000)
BASE CRAWL_CHANGE_NTF VARCHAR2(1)
BASE CRAWL_DRIVING_TABLE VARCHAR2(30)
BASE CRAWL_OBJ_ATTR_0 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_1 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_2 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_3 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_4 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_5 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_6 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_7 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_8 VARCHAR2(2000)
BASE CRAWL_OBJ_ATTR_9 VARCHAR2(2000)
DEFINE PARENTS
KEY PARENT_NAME VARCHAR2(430)
END PARENTS
DEFINE OBJECT_CATEGORY
KEY TYPE VARCHAR2(30)
KEY CODE VARCHAR2(30)
BASE SEQUENCE VARCHAR2(50)
END OBJECT_CATEGORY
DEFINE OBJECT_FLEXFIELD
KEY APPL_SHORT_CODE VARCHAR2(50)
KEY FLEX_TYPE VARCHAR2(20)
KEY FLEX_CODE VARCHAR2(400)
BASE CONTEXT VARCHAR2(4000)
BASE SEGMENT VARCHAR2(4000)
BASE COMPLEX_TYPE VARCHAR2(4000)
END OBJECT_FLEXFIELD
DEFINE OBJ_CHILD_ANNOTATIONS
KEY CHILD_FLAG VARCHAR2(1)
KEY VALUE VARCHAR2(500)
END OBJ_CHILD_ANNOTATIONS
DEFINE TYPE_MEMBERS
KEY SEQUENCE VARCHAR2(50)
KEY INNERTYPE_SEQUENCE VARCHAR2(50)
BASE MEMBER_NAME VARCHAR2(240)
BASE TYPE VARCHAR2(430)
BASE PRECISION VARCHAR2(50)
BASE SIZE VARCHAR2(50)
BASE SCALE VARCHAR2(50)
BASE NULL_ALLOWED VARCHAR2(1)
BASE DESCRIPTION VARCHAR2(4000)
BASE ATTR_SET VARCHAR2(240)
BASE PRIMARY_KEY VARCHAR2(1)
BASE TRANSLATABLE VARCHAR2(1)
BASE COMPOSITE VARCHAR2(1)
BASE DOMAIN_NAME VARCHAR2(240)
BASE MEMBER_TYPE_NAME VARCHAR2(240)
BASE SEARCH_CRITERIA_TYPE VARCHAR2(30)
BASE ATTACHMENT VARCHAR2(1)
BASE MIME_TYPE VARCHAR2(120)
BASE DOMAIN_IMPLEMENTATION VARCHAR2(400)
BASE IS_SORTABLE VARCHAR2(1)
BASE CRAWL_IS_DATE_BASED VARCHAR2(1)
BASE CRAWL_MEMBER_VIS_LVL VARCHAR2(8)
BASE CRAWL_IS_DISPLAYED VARCHAR2(1)
BASE CRAWL_UI_FPARAM_NAME VARCHAR2(240)
BASE CRAWL_INDEXED VARCHAR2(1)
BASE CRAWL_STORED VARCHAR2(1)
BASE CRAWL_IS_SECURE VARCHAR2(1)
BASE CRAWL_IS_TITLE VARCHAR2(1)
BASE CRAWL_WEIGHT VARCHAR2(50)
BASE CRAWL_MBR_ATTR_0 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_1 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_2 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_3 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_4 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_5 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_6 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_7 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_8 VARCHAR2(2000)
BASE CRAWL_MBR_ATTR_9 VARCHAR2(2000)
END TYPE_MEMBERS
DEFINE USES_TABLE
KEY TABLE_NAME VARCHAR2(30)
BASE UT_SEQ VARCHAR2(50)
BASE UT_DIRECTION VARCHAR2(1)
END USES_TABLE
DEFINE USES_MAP
KEY MAP_NAME VARCHAR2(30)
BASE UM_SEQ VARCHAR2(50)
END USES_MAP
DEFINE CLASS_DATASOURCES
KEY DATASOURCE_NAME VARCHAR2(120)
BASE DEF_CLASS VARCHAR2(400)
BASE QUERYABLE VARCHAR2(1)
BASE UPDATEABLE VARCHAR2(1)
BASE INSERTABLE VARCHAR2(1)
BASE MERGEABLE VARCHAR2(1)
BASE DELETEABLE VARCHAR2(1)
BASE PROCESS_QNAME VARCHAR2(120)
BASE QUERY_QNAME VARCHAR2(120)
END CLASS_DATASOURCES
DEFINE OBJ_KEY_SET
KEY KEY_SET_NAME VARCHAR2(120)
KEY KEY_SET_SEQUENCE VARCHAR2(50)
BASE KEY1_MBR_NAME VARCHAR2(240)
BASE KEY2_MBR_NAME VARCHAR2(240)
BASE KEY3_MBR_NAME VARCHAR2(240)
BASE KEY4_MBR_NAME VARCHAR2(240)
BASE KEY5_MBR_NAME VARCHAR2(240)
BASE ALT1_MBR_NAME VARCHAR2(240)
BASE ALT2_MBR_NAME VARCHAR2(240)
BASE ALT3_MBR_NAME VARCHAR2(240)
BASE ALT4_MBR_NAME VARCHAR2(240)
BASE ALT5_MBR_NAME VARCHAR2(240)
END OBJ_KEY_SET
DEFINE IREP_RECORD
KEY COMPLEX_TYPE_NAME VARCHAR2(480)
BASE RECORD_NAME VARCHAR2(80)
BASE SCOPE VARCHAR2(30)
BASE TYPE VARCHAR2(20)
BASE LIFECYCLE VARCHAR2(30)
BASE DESCRIPTION VARCHAR2(32000)
TRANS USER_RECORD_NAME VARCHAR2(80)
TRANS SHORT_DESCRIPTION VARCHAR2(240)
DEFINE FIELDS
KEY SEQUENCE VARCHAR2(50)
KEY INNERTYPE_SEQUENCE VARCHAR2(50)
BASE NAME VARCHAR2(240)
BASE DIRECTION VARCHAR2(1)
BASE OPTIONAL VARCHAR2(1)
BASE TYPE VARCHAR2(430)
BASE PRECISION VARCHAR2(50)
BASE SIZE VARCHAR2(50)
BASE SCALE VARCHAR2(50)
BASE NULL_ALLOWED VARCHAR2(1)
BASE DESCRIPTION VARCHAR2(4000)
BASE DEFAULT_VALUE VARCHAR2(255)
BASE DISPLAYED VARCHAR2(1)
BASE ATTRIBUTE_SET VARCHAR2(240)
BASE KEY_PARAM VARCHAR2(1)
END FIELDS
END IREP_RECORD
DEFINE IREP_METHOD
KEY FUNCTION_NAME VARCHAR2(480)
BASE METHOD_NAME VARCHAR2(80)
KEY OVERLOAD_SEQ VARCHAR2(50)
BASE SCOPE VARCHAR2(30)
BASE INPUT_XSD_FILE VARCHAR2(400)
BASE INPUT_ROOT_ELEMENT VARCHAR2(400)
BASE OUTPUT_XSD_FILE VARCHAR2(400)
BASE OUTPUT_ROOT_ELEMENT VARCHAR2(400)
BASE STATIC VARCHAR2(1)
BASE EXCEPTIONLIST VARCHAR2(4000)
BASE HTTP_VERB VARCHAR2(50)
BASE METHOD_RESOURCE_PATH VARCHAR2(240)
BASE LIFECYCLE VARCHAR2(30)
BASE DESCRIPTION VARCHAR2(32000)
BASE COMPATABILITY VARCHAR2(1)
BASE SYNCHRO VARCHAR2(1)
BASE DIRECTION VARCHAR2(1)
BASE CTX_DEPENDENCE VARCHAR2(8)
TRANS USER_FN_NAME VARCHAR2(80)
TRANS SHORT_DESCRIPTION VARCHAR2(240)
BASE PRIMARY_FLAG VARCHAR2(1)
BASE INDIRECT_OP_FLAG VARCHAR2(1)
DEFINE METHOD_CATEGORY
KEY TYPE VARCHAR2(30)
KEY CODE VARCHAR2(30)
BASE SEQUENCE VARCHAR2(50)
END METHOD_CATEGORY
DEFINE METHOD_FLEXFIELD
KEY APPL_SHORT_CODE VARCHAR2(50)
KEY FLEX_TYPE VARCHAR2(20)
KEY FLEX_CODE VARCHAR2(400)
BASE CONTEXT VARCHAR2(4000)
BASE SEGMENT VARCHAR2(4000)
BASE COMPLEX_TYPE VARCHAR2(4000)
END METHOD_FLEXFIELD
DEFINE METHOD_CHILD_ANNOTATIONS
KEY CHILD_FLAG VARCHAR2(1)
KEY VALUE VARCHAR2(500)
END METHOD_CHILD_ANNOTATIONS
DEFINE PARAMS
KEY SEQUENCE VARCHAR2(50)
KEY INNERTYPE_SEQUENCE VARCHAR2(50)
BASE NAME VARCHAR2(240)
BASE DIRECTION VARCHAR2(1)
BASE OPTIONAL VARCHAR2(1)
BASE TYPE VARCHAR2(430)
BASE PRECISION VARCHAR2(50)
BASE SIZE VARCHAR2(50)
BASE SCALE VARCHAR2(50)
BASE NULL_ALLOWED VARCHAR2(1)
BASE DESCRIPTION VARCHAR2(4000)
BASE DEFAULT_VALUE VARCHAR2(255)
BASE DISPLAYED VARCHAR2(1)
BASE ATTRIBUTE_SET VARCHAR2(240)
BASE KEY_PARAM VARCHAR2(1)
END PARAMS
END IREP_METHOD
END IREP_OBJECT
# -- End Entity Definitions --
BEGIN IREP_OBJECT "JAVA:oracle.apps.per.sample.service.HelloWorld" "C"
OWNER = "sysadmin"
API_NAME = "oracle.apps.per.sample.service.HelloWorld"
OBJ_TYPE = "JAVA"
PRODUCT = "PER"
SCOPE = "PUBLIC"
SOURCE_FILE_PRODUCT = "per"
SOURCE_FILE_PATH = "patch/115/java"
SOURCE_FILE_NAME = "HelloWorld.java"
SOURCE_FILE_VERSION = "12.1"
DESCRIPTION = "A sample class to demonstrate how Java API can use the ISG REST framework. This class provides\n\
methods to return string Hello World"
DISPNAME = "Hello World"
SHORTDISC = "A sample class to demonstrate how Java API can use the ISG REST framework."
TIMESTAMP = "2018/12/04"
OI_FLAG = "N"
PARSER_VERSION = "12.0.0"
SDO_IS_FILTER = "N"
SDO_FILTER_REQUIRED = "N"
SDO_IS_EXPRESSION = "N"
CRAWL_CRAWLABLE = "N"
CRAWL_CHANGE_NTF = "N"
BEGIN OBJECT_CATEGORY "BUSINESS_ENTITY" "HR_USER_HOOK"
END OBJECT_CATEGORY
BEGIN OBJECT_CATEGORY "IREP_CLASS_SUBTYPE" "JAVA_BEAN_SERVICES"
END OBJECT_CATEGORY
BEGIN IREP_METHOD "JAVA:oracle.apps.per.sample.service.HelloWorld:getHelloWorld" "1"
METHOD_NAME = "getHelloWorld"
SCOPE = "PUBLIC"
HTTP_VERB = "GET"
DESCRIPTION = "This method returns a list of direct reports of the requesting user."
USER_FN_NAME = "Get Hello World"
SHORT_DESCRIPTION = "This method returns a list of direct reports of the requesting user."
PRIMARY_FLAG = "N"
INDIRECT_OP_FLAG = "N"
BEGIN METHOD_CATEGORY "BUSINESS_ENTITY" "HR_USER_HOOK"
END METHOD_CATEGORY
BEGIN METHOD_CATEGORY "IREP_CLASS_SUBTYPE" "JAVA_BEAN_SERVICES"
END METHOD_CATEGORY
BEGIN PARAMS "0" "0"
NAME = "RETURN"
DIRECTION = "O"
OPTIONAL = "N"
TYPE = "java.lang.String"
NULL_ALLOWED = "N"
DESCRIPTION = "Hello World string"
DISPLAYED = "Y"
END PARAMS
END IREP_METHOD
END IREP_OBJECT
Next, we’ll be uploading this file to the Integration Repository using the following command:
FNDLOAD apps/<apps_password> 0 Y UPLOAD $FND_TOP/patch/115/import/wfirep.lct HelloWorld_java.ildt
If successful, you will see something like this:

Let’s check the log file to make sure there were no errors during the upload.

Now let’s check the service in the Repository.
Login to your Oracle E-Business Suite instance as SYSADMIN.

Switch to Integrated SOA Gateway responsibility.

Select Integration Repository

Click Search

Search for “Hello World” in the Interface Name and click Go

Click the Name of the Interface

You should now see the details of the Interface object.

To enable the REST Web Service, click on the REST Web Service tab. Enter an alias for this. Then click Deploy. The alias will be used as part of the URL later on when invoking the service. Once deployed, you can get more information on the service by clicking on the WADL.

Let’s move on to the Grants tab and grant the service to some users. Check the Get Hello World and click Create Grant.

Enter the necessary information then click Create Grant. In my case, I chose Special User for Grantee Type and SYSADMIN for Grantee Name.

At this point, we need to restart the following:
opmn
oafm
You can refer to this link for details on how to start and stop Oracle scripts.
To invoke the web service, I'm going to use Postman as my REST client. Below are the details for the request:
- Method: GET
- Url: http://
: /webservices/rest/hw/getHelloWorld/?ctx_responsibility=SYSTEM_ADMINISTRATOR&ctx_respapplication=SYSADMIN&ctx_securitygroup=STANDARD&ctx_nlslanguage=AMERICAN
where:- ctx_responsibility. FND Responsibility Key
- ctx_respapplication. FND Application Short Name
- ctx_securitygroup. Security Group
- ctx_nlslanguage. NLS Language
- Authorization: Basic <encoded username:password>
- Content-Type: application/json
See sample response below:
{
"OutputParameters": {
"ControlBean": [
{
"fields": "",
"filter": "",
"limit": "",
"offset": "",
"sort": ""
}
],
"value": [
"Hello World"
]
}
}
See screen shot below for sample

And that's it. Enjoy.
References:
No comments:
Post a Comment