Call OIM APIs

Hello,
I am writing a java program to call the OIM APIs to reset a user's password and set up security questions.
First in my java program I need to make a connection to OIM URL. Example of my URL is: http://lenovo-d0446ff6.:7778/xlWebApp/
What API in OIM may I use to establish the connection or is there another way to connect to OIM via some java code.
Thanks

I followed the OIM API Usage Guide and the Getting started with OIM API's using Eclipse.
When I ran FirstAPITest, I got the following error message:
Startup...
Getting configuration...
Login...
log4j:WARN No appenders could be found for logger (XELLERATE.ACCOUNTMANAGEMENT).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" java.lang.NoClassDefFoundError: javax/ejb/EJBHome
     at java.lang.ClassLoader.defineClass1(Native Method)
     at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
     at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
     at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
     at java.lang.Class.forName0(Native Method)
     at java.lang.Class.forName(Class.java:164)
     at com.thortech.xl.ejb.interfaces.tcUnauthenticatedOperationsUtil.class$(Unknown Source)
     at com.thortech.xl.ejb.interfaces.tcUnauthenticatedOperationsUtil.getHome(Unknown Source)
     at Thor.API.Security.LoginHandler.oracleLoginHandler.handleOracleClientLogin(Unknown Source)
     at Thor.API.Security.LoginHandler.oracleLoginHandler.login(Unknown Source)
     at Thor.API.Security.ClientLoginUtility.login(Unknown Source)
     at Thor.API.tcUtilityFactory.<init>(Unknown Source)
     at FirstAPITest.main(FirstAPITest.java:16)
I tried to search the forum for javax/ejb/EJBHome without success. Did I miss another jar?
Thanks

Similar Messages

  • How to call OIM API from external app?

    Hi,
    I have an java application and I would like to call OIM API to accept a request. The application resides in separate server than OIM.
    My questions:
    *1.* What to do to call OIM API from external application (import any OIM jars etc.)?
    *2.* Which method to use, setRequestResponse , closeRequest or any other?
    I appreciate any help, thanks.
    Edited by: m.m. on Feb 2, 2010 5:33 AM

    Hello,
    If it is an external client, you need to provide the "login" and "password" details explicitly in the code (something like this), before getting any other Interface control to invoke the OIM APIs -
    public class OIMAPIClientTest {
    public static void main(String[] args) {
    try{
    System.out.println("Starting...");
    ConfigurationClient.ComplexSetting config = ConfigurationClient.getComplexSettingByPath("Discovery.CoreServer");
    Hashtable env = config.getAllSettings();
    tcUtilityFactory ioUtilityFactory = new tcUtilityFactory(env,"xelsysadm","abcd1234");
    System.out.println("Getting utility interfaces...");
    Regards,
    Amit
    Edited by: amitKumar on Feb 2, 2010 5:29 AM

  • Calling OIM API from a remote system

    Hi.
    I have OIM 9031 server installed on a computer HostA. And I have multiple copies of the 3rd party java program installed on HostB, HostC and so on.
    I need to be able to call some OIM API from that custom java program (for example, receive the list of active users from OIM server).
    According to OIM documentation, I can use Remote manager to manage users on non-network awared systems.
    But what if I use Remote manager for calling remote OIM API ? Is that possible?
    Or are there any easier ways to achieve my goal ?

    The installer in the AD sync connector is provided because in addition to having the OIM API client, there is a DLL that needs to be installed and registered to capture the plaintext password. It is not necessary to have an installer, but it might be be a convenience if you are deploying to many machines.
    Here is some code to get you started:
    import Thor.API.tcUtilityFactory;
    import com.thortech.xl.util.config.ConfigurationClient;
    import java.util.Hashtable;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    public class TcUtilFactory {
    Log log = LogFactory.getLog("OIMCLIENT.UTILITY");
    private tcUtilityFactory factory = null;
    private Hashtable env = null;
    public TcUtilFactory() throws Exception {
    // you can also set these system properties on the command line
    System.setProperty("XL.HomeDir", "/opt/oimclient);
    System.setProperty("java.security.policy", "config/xl.policy");
    System.setProperty("log4j.configuration", "config/log.properties");
    System.setProperty("java.security.auth.login.config", "config/auth.conf");
    ConfigurationClient.ComplexSetting configClient = ConfigurationClient
    .getComplexSettingByPath("Discovery.CoreServer");
    env = configClient.getAllSettings();
    try {
    factory = new tcUtilityFactory(env, "xlsysadm", "xelsysadm");
    } catch (Exception e) {
    // handle exceptions thrown by tcUtilityFactory constructor
    From here you can write whatever methods you need going against tcUtilityFactory. Also note that you will need many of the jars from your lib directory as well as the properly configured xl.config and other files in the config directory that the design console client uses (I usually just copy them from that install). Last you will need to make sure you have the required jars specific to you app server (the ones you need to copy over during the design console install)

  • Use existing session to call OIM api methods

    We have a situation where the user logs into the application using his/her username and password.
    At this point we perform a post to one of the OAM handlers, that authenticates the user and lets them in to the rest of the application. By the time we get here, I do not have the user's password anymore. All I have is the username. But I need to get an valid instance of oimClient and call some of the services such as Usermanager [ UserManager userService = oimClient.getService(UserManager.class); ]. Any idea how can I establish a connection with OIM and call this service ?
    All help appreciated. Thank you.

    To connect to OIM, you will need username and password.
    If you want to connect with user who are logging into your application, then you will also need their password. In that case, you will also have to make sure that these users have permission to perform UserManager operations.
    Alternatively, you can use some service account to connect to OIM [possibly decrypt the password of users who logged in]

  • External Calls to OIM API

    I am using OIM 9.1.0.1 as a standalone system.
    i want to call OIM API to create user.
    I have a created a custom JSP page.
    How can i call OIM API to create user in OIM.
    Thanks.

    {color:#000080}You can use the following to invokel OIM APIs from external WebApps:
    {color} private static tcUtilityFactory _util = null;
    static {
    ConfigurationClient.ComplexSetting config = ConfigurationClient
    .getComplexSettingByPath("Discovery.CoreServer");
    try {
    final Hashtable env = config.getAllSettings();
    _util = new tcUtilityFactory(env, "xelsysadm", &lt;pwd&gt;);
    } catch (Exception e) {
    e.printStackTrace();
    public Object getObjectReference(String qualifiedObjectName) {       
    return util == null ? null : (tcUtilityOperationsIntf) util
    .getUtility(qualifiedObjectName);
    {color:#000080}Create an instance of the above class and invoke 'getObjectReference(...)'{color}
    E.g.:
    tcUserOperationsInft _usrOpRef = (tcUserOperationsIntf) )new &lt;ClassName&gt;().getObjectReference("Thor.API.Operations.tcUserOperationsIntf");and then invoke any of the methods from user API class
    {color:#000080}Hope this helps{color}
    Now for creating user, all you have to do is:

  • Exposing OIM APIs as webservice

    Hi,
    I wanted to know if i can expose OIM APIs as webservice?
    As per my reqmnt, i need to implement forgot password and change password functionality for OIM users from a portal application.
    So wanted to know if I can use OIM APIs say getChallengeValuesForSelf , compareChallengeValuesForSelf, changePasswordForSelf and then expose them as webservice?

    Can I do this...
    Create a WebService using NetBeans Editor...
    In it add a web method, which basically is using OIM API say getChallengeValuesForUser to fetch some value and then returning it as output of this web method?
    I'll be setting all the system properties required for calling OIM API here itself and also would make the connection to OIM here.
    I tried doing so, but getting an exception while I try to deploy the webservice,
    com.sun.xml.ws.model.RuntimeModelerException: The web service defined by the class weblogic.wsee.async.AsyncResponseBeanSoap12 does not contain any valid WebMethods.
    Kindly suggest.

  • Using OIM APIs

    I need to use OIM APIs from a third party web application.
    I would like to know, would it be possible as our OIM server would be at a different m/c then the client web application.
    So how would the settings be done in this case, as we set some system variables in the code for accessing the OIM APIs which include mentioning the path of Xellerate folder.
    Kindly guide.

    I have gone through this link, and have used OIM APIs earlier, but in that case both my code and the OIM server were running on the same m/c.
    But now its a third party web app which wants to call OIM APIs, hence I would like to knw, how d following settings would be done.
    System.setProperty("XL.HomeDir", "D:/NewOIM/xellerate");
    System.setProperty("java.security.policy", "D:/NewOIM/xellerate/config/xl.policy");
    System.setProperty("java.security.auth.login.config", "D:/NewOIM/xellerate/config/authwl.conf");
    System.setProperty("log4j.configuration", "D:/NewOIM/xellerate/config/log.properties");
    System.setProperty("java.naming.provider.url", "t3://blrkec87910d:7001");
    As uptil now I was giving the local location of these folders.
    But now how would I give it?

  • OIM 11g - Error while calling ignoreEvent() API

    Hi,
    I am getting the following error,while calling ignoreEvent API in my recon code:
    "Thor.API.Exceptions.tcAPIException: Problem with the matching rule"
    Any ide what could be causing the issue?.Thanks

    Hi
    This means, the reconciliation matching rules are not defined correctly. Please verify the following:
    1. The key fields defined in the process definition for process match
    2. The reconciliation rule defined for this resource object for entity match. This rule should the valid and active check boxes checked.
    After verifying the above, click on the "Create Reconciliation Profile" button present in the Resource object's tabs.
    Regards
    user12841694

  • OIM API in web service

    Hello,
    I'm using the OIM API in a web service. Once the web service is deployed when calling the api it fails throwing this error. Any ideas will be greatly appreciate it
    0000002b SystemErr R Thor.API.Exceptions.tcAPIException: com.thortech.xl.security.tcLoginException: javax.naming.NameNotFoundException: Context: Test70Network/clusters/WAS70A, name: ejb/tcUnauthenticatedOperations: First component in name ejb/tcUnauthenticatedOperations not found. [Root exception is org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0]
    R      at Thor.API.tcUtilityFactory.createLoginException(Unknown Source)
    R      at Thor.API.tcUtilityFactory.<init>(Unknown Source)
    Thanks

    Hello,
    Did you ever receive an answer to this problem? And if so, I would love to know what it was.
    Thanks!

  • Transaction Management - OIM API

    We wanted to know how to handle transaction from OIMClient, when we make OIM API call.
    eg:
    from a java client, we invoke create organization and provision resource to that organization.
    i.e we end up calling two OIM api calls
    1)
        organizationManager.create(organizationObj);
    2)
    tcOrganizationOperationsIntf.provisionObject(orgKey,resourceKey);
    Now, if 2nd one fails, then transaction should be rolled back and organization create should be rolled back. we wanted single unit of work to be achieved.
    how can this be achieved?
    how do we control transaction from OIMClient/API?
    public String createOrganization(OrganizationVO ovo) {
      String result = "";
      OrganizationManager omgr = null; // OIMClient API
      Organization org = null; // OIMClient API
      try { 
      omgr=ULMServiceLocator.getInstance().getOrganizationManager();
      org = new Organization();
      org.setAttribute("Organization Name", ovo.getOrgName());
      org.setAttribute("Organization Customer Type", ovo.getOrgType());
      result = omgr.create(org);
      tcUtilityFactory ioutilityFactory = ULMServiceLocator.getInstance().getcUtilityFactory();
      //TODO
      tcOrganizationOperationsIntf utilityFactory1 = (tcOrganizationOperationsIntf) ioutilityFactory
      .getUtility("Thor.API.Operations.tcOrganizationOperationsIntf");
      long l1 = utilityFactory1.provisionObject(Long.parseLong(result),
      123l);
      } catch (oracle.jrf.UnknownPlatformException e) {
      e.printStackTrace();
      } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      return result;

    Hi Abhay,
    <b>If there is another way to add a record to Main table and Lookup/Qualified/Hierarchy table simultaneously then there is no need of Transaction.</b>
    There are no direct methods currently(as of MDM 5.5SP3) available in MDM API.
    You have to build your own logic to implement.
    Regarding the Transaction management, I guess you are talking aboout two phase commit scenarios. I would say you can achieve this using EJB's in which u write the business logic (In this case the MDM API code).
    For Example:
    Adding a record to Main table,
    Let say 2 fields
    1. Free text field.
    Its straight forward method, use A2iFiled object and assign some value to it.
    2. Lookup field.
    For this.
    First get the Record id for the value, which you are trying to add, from the lookup table.
    If the lookup table does not find the value in the table, it return zero or some negative value(which I am not sure).
    Based on the return value you can add the value into the lookup table and then into the main table.
    Just putting a sample scenario. Hope this helps.
    Thanks and regards
    Subbu

  • How to Create Resource Object in OIM through SQL queries or OIM APIs

    Hello,
    I have to create few (100) resource Objects in OIM. I was creating manually through Design console one by one. In future we might need to create many more Resource Objects .It takes lot of time if we do it through Manually.
    Is there any possiblity we can create Resource Objects through SQL query or OIM APIs ???
    Thanks!!

    Yes. I do it all the time.
    If you are using 11G 11.1.1.3
    Go here
    http://fredforester.org/code/xmlstarters/
    Download the files.
    RESCFORM.xml is an example resource built from the template
    buildtemplate.sh is a shell script that creates a resource from the template
    index.php - you dont need this
    templateresource.xml - this is the template resource. it was created by building a simple resource with all its basic tasks and components then editing it and renaming things so I can find them with sed
    to create Resource C you would
    ./buildtemplate.sh RESCFORM "Resc Resource" "Resc Process"
    you would end up with a file called RESCFORM.xml where when imported would have
    UD_RESCFORM
    Resc Resource Resouce Defintion
    Resc Process Process Defition with basic tasks pointing to a dummy adapter.
    You can optionally create your own prepop so it will get assigned to the form when you import.
    Good luck

  • An internal error occurred while calling 'submitReport' API. (Error: ERR_WI

    An internal error occurred while calling 'submitReport' API. (Error: ERR_WIS_30270)
    We get above mentioned error message at any point in WebI Rich Client.
    DataSource: Teradata 12.0 (Local machine)
    BO XI 3.1 Client installed on local machine
    Universe (Secured connection)
    WebI : desiging and creating in Standlone mode
    WebI client version : 12.1.0.882
    Many times above written error is thrown 2-3 times even when we click on OK button and lastly followed by new error message:-
    Unable to get the first page of the current report - Web Intelligence will switch to structure view (WIJ 20003).
    Flow: We create report based on locally saved universe. There are couple of scenarios for which error comes
    1) After successfully saving the report, reopen and refresh causes this error (1st error and 2nd)
    2) Droping a properly written variable on measure column, if done Ctrl + Z, report works sometimes (both or 2nd error message)
    3) Draging out the mesaure or dimension from report (only 2nd error)
    Report is simple and no other stuff except the cross tab table
    Even if we start with simply dropping the dimension and measures on report, 2nd error comes at any time.
    What we noticed is that if we do all desiging in structure mode and then run instead of in result mode, reports works for more time.

    You can have a look here:
    Input Controls with Break Error on webi report
    http://www.forumtopics.com/busobj/viewtopic.php?t=60789&postdays=0&postorder=asc&start=45
    Re: internal error occurred while calling the 'submitReport' API.
    I'm Back
    HAPPY NEW YEAR

  • Calling BPEL API's from pl/sql

    Is it possible to call the wthdrawTask api from PL/SQL? If so, what would the code look like to do this?
    Bonnie

    I am working on the same thing and I believe you have to use Java to call the api's. I have built a work around so far but I would like to be able to use the built in functionality. Please let me know if you have found anything.
    Cheers MIke

  • Getting error while calling AME api from the page

    Hi,
    I am calling ame api ame_api2.getallapprovers7 from our custom page.I have written following code-
    public void getapprovers(String transactionid)
    String OutError = "";
    ArrayList al = new ArrayList();
    OADBTransaction trans = getOADBTransaction();
    String insStmnt = "BEGIN " +
    "ame_api2.getAllApprovers7(applicationIdIn => :1,transactionTypeIn =>:2,transactionIdIn =>:3,"+
    "l_processYN =>:4,approversOut =>:5); " +
    "END;";
    OracleCallableStatement stmt = (OracleCallableStatement)trans.createCallableStatement(insStmnt, 1);
    try
    stmt.setString(1, "800");
    stmt.setString(2, "XXXXCWKAPP");
    stmt.setString(3, transactionid);
    stmt.registerOutParameter(4, OracleTypes.VARCHAR);
    stmt.registerOutParameter(5, OracleTypes.ARRAY,"XXXX_APPROVER_TABLE");
    stmt.execute();
    // OAExceptionUtils.checkErrors as per PLSQL API standards
    OAExceptionUtils.checkErrors(trans);
    ARRAY arrayError = stmt.getARRAY(5);
    Datum[] arr = arrayError.getOracleArray();
    for (int i = 0; i < arr.length; i++)
    oracle.sql.STRUCT os = (oracle.sql.STRUCT)arr;
    Object[] a = os.getAttributes();
    System.out.println("Column:" + a[0] + " Value:" + a[1]);
    //OutError = (String)a[1];
    //al.add(new OAException(OutError, OAException.ERROR));
    stmt.close();
    catch(SQLException sqle){
    try { stmt.close(); }
    catch (Exception e) {;}
    throw OAException.wrapperException(sqle);
    if (OutError != null)
    // OAException.raiseBundledOAException(al);
    4 and 5th parameters are out parameters and 5th parameter provides the approver records and it should have the same data type as ame_util.approversTable2. I have created this table type explicitly in oracle by the name XXXX_APPROVER_TABLE but i am getting the error while running the page "java.sql.SQLException: Fail to construct descriptor: Unable to resolve type: "APPS.ETHR_APPROVER_TABLE"". I requirement is to take the 5th parameter in ame_util.approversTable2 data type.
    Please help me urgently.
    Thanks
    Ashish

    Hi Kumar,
    The ETHR_APPROVER_TABLE is custom pl sql indexed table that I have created.following are the parameters of api-
    procedure getAllApprovers7(
    applicationIdIn in number,
    transactionTypeIn in varchar2,
    transactionIdIn in varchar2,
    approvalProcessCompleteYNOut out varchar2,
    approversOut out nocopy ame_util.approversTable2);
    i need a out variable of type ame_util.approversTable2 so get the values.
    I have changed the code and now getting the following error-
    java.sql.SQLException: ORA-03115: unsupported network datatype or representation
    I have only changed this statement.
    stmt.registerOutParameter(5,OracleTypes.PLSQL_INDEX_TABLE);//,"XXXX_APPROVAL_TBL");
    Edited by: user5756777 on Jul 13, 2009 4:17 AM

  • Enabling a User through OIM API

    Hi I am trying to enable a user through OIM API, However the end date is already passed for that user, I am setting up a new end date through the Program (showm below). However the update user is not working (i am not sure).
    Map usermap = new HashMap();
    usermap.put("Users.User ID", User_id );
    Map grpmap = new HashMap();
    grpmap.put("Groups.Group Name", Group_Name);
    tcResultSet ts = userClient.findUsers(usermap); //find all users
    String existing_end_date = ts.getStringValue("Users.End Date");
    tcResultSet tg = groupClient.findGroups(grpmap); //find requireq group
    long ukey = ts.getLongValue("Users.Key");
    long gkey = tg.getLongValue("Groups.Key"); //find group key
    // ENABLE THE USER
    java.util.Date new_end_date = new java.util.Date(111,1,1);
    Calendar cal = Calendar.getInstance();
    cal.setTime(new_end_date);
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    String Str1 = dateFormat.format(cal.getTime());
    String Str2 = existing_end_date + " 12:00:00";
    System.out.println(User_id+" OLD End Date:" + Str2 + " New End Date: " + Str1);
    Map usermap2 = new HashMap();
    usermap2.put("Users.User ID", User_id );
    usermap2.put("Users.End Date", Str1);
    userClient.updateUser(ts,usermap2);
    userClient.enableUser(ukey);
    I am getting the following error:
    U0000018 OLD End Date:2009-09-30 12:00:00 New End Date: 2011-02-01 12:00:00
    2/12/2010 15:02:53 oracle.j2ee.rmi.RMIMessages EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER
    WARNING: Exception returned by remote server: {0}
    Thor.API.Exceptions.tcAPIException: The user cannot be enabled because the end date is passed.
    Not sure why it is happening. It looks like the Updateuser is not working, or something else?
    Please advise. Thanks in advance.

    Hi Suren,
    thanks for the note.
    I found that as soon as I enable the user, I am getting the followimg messages in the opmn logs:
    INFO,06 Dec 2010 10:55:41,841,[XELLERATE.JAVACLIENT],System Event Handler: Validating Organization for an User.
    INFO,06 Dec 2010 10:55:41,944,[XELLERATE.JAVACLIENT],System Event Handler: Triggering Processes related to User.
    INFO,06 Dec 2010 10:55:42,402,[XELLERATE.JAVACLIENT],System Event Handler: Enabling the User
    INFO,06 Dec 2010 10:55:42,421,[XELLERATE.JAVACLIENT],System Event Handler: Validating Organization for an User.
    INFO,06 Dec 2010 10:55:42,427,[XELLERATE.JAVACLIENT],System Event Handler: Triggering Processes related to User.
    INFO,06 Dec 2010 10:55:42,439,[XELLERATE.JAVACLIENT],System Event Handler: Changing application data based on Organization change.
    INFO,06 Dec 2010 10:55:42,442,[XELLERATE.JAVACLIENT],System Event Handler: Auto-Group Membership Event.
    INFO,06 Dec 2010 10:55:43,715,[XELLERATE.JAVACLIENT],System Event Handler: Evaluating User Policies
    So, the access policies are getting evaluated, triggering provisioning processes.
    What I am planning to do is, to disable the access policies and try to run the Program.
    Because of this issue, my Program is throwing an error (until I looked into the opmn logs, it doesn't make sense).
    6/12/2010 10:55:50 oracle.j2ee.rmi.RMIMessages EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER
    WARNING: Exception returned by remote server: {0}
    Thor.API.Exceptions.tcAPIException: Error occurred enabling Xellerate User instance.
    Regards
    Vijay Chinnasamy

Maybe you are looking for