OIM OIA Custom Code Integration via Web Services
This post covers the OIM OIA custom integration via web services.
What this integration code does is listen for create or modify event in OIM and if that change is detected for a user profile then propagates it to OIA user in real time.
If a user is created in OIM, then create the user in OIA.
If a user is modified in OIM, then modify the user in OIA.
OIM changes are detected via Event Handler.
OIA web services are invoked to create or modify the user in OIA.
OIM Event Handler
What this integration code does is listen for create or modify event in OIM and if that change is detected for a user profile then propagates it to OIA user in real time.
If a user is created in OIM, then create the user in OIA.
If a user is modified in OIM, then modify the user in OIA.
OIM changes are detected via Event Handler.
OIA web services are invoked to create or modify the user in OIA.
OIM Event Handler
1 package com.dubey.deepak.oim.oia.intg; 2 3 import Thor.API.Exceptions.tcAPIException; 4 import Thor.API.Exceptions.tcStaleDataUpdateException; 5 import Thor.API.Exceptions.tcUserNotFoundException; 6 7 import com.dubey.deepak.oim.oia.intg.ItResourceObj; 8 import com.dubey.deepak.oim.oia.intg.OIADBConnector; 9 import com.dubey.deepak.oim.oia.intg.OIAIntegrationConstants; 10 import com.dubey.deepak.oim.oia.intg.OIARequest; 11 import com.dubey.deepak.oim.oia.intg.OIA_OIM_Util; 12 import com.thortech.util.logging.Logger; 13 import com.thortech.xl.client.events.tcBaseEvent; 14 import com.thortech.xl.dataaccess.tcDataProvider; 15 import com.thortech.xl.dataobj.tcDataObj; 16 17 import java.util.HashMap; 18 import java.util.Iterator; 19 import java.util.Map; 20 import java.util.Set; 21 22 import Thor.API.Operations.tcUserOperationsIntf; 23 import Thor.API.tcResultSet; 24 import Thor.API.tcUtilityFactory; 25 26 public class OIAEventHandler extends tcBaseEvent { 27 28 private static Logger logger = OIAIntegrationConstants.logger; 29 30 public OIAEventHandler() { 31 super(); 32 setEventName("OIAEventHandler"); 33 } 34 35 protected void implementation() throws Exception { 36 logger.debug("oia event handler"); 37 tcDataObj dataObj = getDataObject(); 38 tcDataProvider dataProvider = getDataBase(); 39 OIA_OIM_Util oIA_OIM_Util = new OIA_OIM_Util(); 40 ItResourceObj itResourceObj = oIA_OIM_Util.initITResourceObj( 41 dataProvider, OIAIntegrationConstants.ITRESOURCENAME); 42 Map oimOiaAttributeMap = oIA_OIM_Util.loadMetaDataLookup(dataProvider); 43 logger.debug(" oimOiaAttributeMap ---> " + oimOiaAttributeMap); 44 Map<String, String> oiaAttributeValueMap = getOimAttributeValues( 45 dataObj, oimOiaAttributeMap); 46 logger.debug(" oiaAttributeValueMap ---> " + oiaAttributeValueMap); 47 OIARequest oIARequest = new OIARequest(itResourceObj); 48 try { 49 String oimLoginName = dataObj 50 .getString(OIAIntegrationConstants.OIMUSERLOGINATTRIBUTE); 51 String oldOIMLoginName = dataObj 52 .getCurrentString(OIAIntegrationConstants.OIMUSERLOGINATTRIBUTE); 53 logger.debug("oldOIMLoginName -> " + oldOIMLoginName); 54 if (!(oimLoginName.equalsIgnoreCase(oldOIMLoginName))) { 55 OIADBConnector oIADBConnector = new OIADBConnector(); 56 if (oIADBConnector.updateUserName(itResourceObj, 57 oldOIMLoginName, oimLoginName)) { 58 logger.debug("User Name renamed in OIA"); 59 } 60 } 61 String oimUsrKey = dataObj 62 .getString(OIAIntegrationConstants.OIMUSERKEYATTRIBUTE); 63 String oiaID = dataObj 64 .getString(OIAIntegrationConstants.OIAIDATTRIBUTE); 65 logger.debug("oimLoginName---->" + oimLoginName); 66 oiaAttributeValueMap.put(OIAIntegrationConstants.USR_KEY_ATTRIBUTE, 67 oimUsrKey); 68 69 if ((oiaID != null) && (!(oiaID.trim().equalsIgnoreCase("")))) { 70 logger.debug("OIM User already linked with OIA User so calling updateUser web service"); 71 Map oiaUsrMap = oIARequest.findUser(oimLoginName); 72 boolean isUserUpdated = oIARequest.updateUser(oimLoginName, 73 oiaUsrMap, oiaAttributeValueMap); 74 if (isUserUpdated) { 75 logger.debug("User Updated in OIA"); 76 } 77 } else { 78 logger.debug("OIM User not linked with OIA User so calling createUser web service"); 79 boolean isUserCreated = oIARequest.createUser(oimLoginName, 80 oiaAttributeValueMap); 81 if (isUserCreated) { 82 logger.debug("User Created in OIA"); 83 OIADBConnector oIADBConnector = new OIADBConnector(); 84 oiaID = oIADBConnector.getID(itResourceObj, oimLoginName); 85 logger.debug("oiaID recieved from oia-->" + oiaID); 86 boolean isUserUpdInOIM = updateUserInOIM(dataProvider, 87 oimLoginName, oiaID); 88 if (isUserUpdInOIM) { 89 logger.debug("OIA ID Set for the user in OIM"); 90 } 91 } 92 } 93 logger.debug("Exiting implementation() of OIAEventHandler"); 94 } catch (Exception ex) { 95 logger.error("Error in main()---->" + ex.getMessage()); 96 ex.printStackTrace(); 97 } finally { 98 if ((dataProvider != null) && dataProvider.isOpen()) { 99 dataProvider.close(); 100 } 101 if (dataObj != null) { 102 dataObj = null; 103 } 104 } 105 return; 106 } 107 108 private Map<String, String> getOimAttributeValues(tcDataObj dataObj, 109 Map oiaOimAttributeMap) { 110 logger.debug("Entering getOimAttributeValues(tcDataObj dataObj, Map oiaOimAttributeMap) of OIAEventHandler"); 111 Map<String, String> oiaAttributeMap = null; 112 try { 113 oiaAttributeMap = new HashMap<String, String>(); 114 Set set = oiaOimAttributeMap.keySet(); 115 Iterator iterator = set.iterator(); 116 while (iterator.hasNext()) { 117 String oiaAttrKey = iterator.next().toString(); 118 String oimAttrName = (String) oiaOimAttributeMap 119 .get(oiaAttrKey); 120 String oimAttrValue = dataObj.getString(oimAttrName); 121 logger.debug("oiaAttrKey->" + oiaAttrKey); 122 logger.debug("oimAttrName->" + oimAttrName); 123 logger.debug("oimAttrValue->" + oimAttrValue); 124 oiaAttributeMap.put(oiaAttrKey.toString(), 125 oimAttrValue.toString()); 126 127 } 128 } catch (Exception e) { 129 logger.error("Error in getOimAttributeValues(Map oiaOimAttributeMap) ->" 130 + e.getMessage()); 131 e.printStackTrace(); 132 } 133 logger.debug("Exiting getOimAttributeValues(tcDataObj dataObj, Map oiaOimAttributeMap) of OIAEventHandler"); 134 return oiaAttributeMap; 135 } 136 137 public boolean updateUserInOIM(tcDataProvider dataProvider, 138 String oimLoginName, String oiaID) { 139 boolean flag = false; 140 tcUserOperationsIntf userIntf = null; 141 try { 142 userIntf = (tcUserOperationsIntf) tcUtilityFactory.getUtility( 143 dataProvider, "Thor.API.Operations.tcUserOperationsIntf"); 144 Map mhSearchCriteria = new HashMap(); 145 mhSearchCriteria.put("Users.User ID", oimLoginName); 146 tcResultSet userRSet = userIntf.findUsers(mhSearchCriteria); 147 int rowcount = userRSet.getRowCount(); 148 if (rowcount == 1) { 149 HashMap phAttributeList = new HashMap(); 150 phAttributeList.put(OIAIntegrationConstants.OIAIDATTRIBUTE, 151 oiaID); 152 userRSet.goToRow(0); 153 userIntf.updateUser(userRSet, phAttributeList); 154 } 155 } catch (tcUserNotFoundException ex) { 156 logger.error("Exception occurred --->" + ex.getMessage()); 157 } catch (tcStaleDataUpdateException ex) { 158 logger.error("Exception occurred --->" + ex.getMessage()); 159 } catch (tcAPIException ex) { 160 logger.error("Exception occurred --->" + ex.getMessage()); 161 } catch (Exception ex) { 162 logger.error("Exception occurred --->" + ex.getMessage()); 163 } finally { 164 if (userIntf != null) { 165 userIntf.close(); 166 } 167 } 168 return flag; 169 } 170 } 171
OIARequest class contains webservices code it invokes the OIA webservices
1 package com.dubey.deepak.oim.oia.intg; 2 3 import java.net.URL; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.Map; 7 import java.util.Set; 8 9 import javax.xml.namespace.QName; 10 import javax.xml.soap.MessageFactory; 11 import javax.xml.soap.Node; 12 import javax.xml.soap.SOAPBody; 13 import javax.xml.soap.SOAPBodyElement; 14 import javax.xml.soap.SOAPConnection; 15 import javax.xml.soap.SOAPConnectionFactory; 16 import javax.xml.soap.SOAPElement; 17 import javax.xml.soap.SOAPFault; 18 import javax.xml.soap.SOAPHeader; 19 import javax.xml.soap.SOAPMessage; 20 21 import org.w3c.dom.NodeList; 22 23 import com.thortech.util.logging.Logger; 24 25 //import com.thortech.util.logging.Logger; 26 27 public class OIARequest { 28 29 private static Logger logger = OIAIntegrationConstants.logger; 30 31 private String ENDPOINT_URL = null; 32 33 private String OIA_SYSACCOUNT = null; 34 private String OIA_PWD = null; 35 36 public OIARequest(ItResourceObj itResourceObj) { 37 // logger.debug("Entering OIARequest"); 38 39 String host = itResourceObj.getAppHost(); 40 String port = itResourceObj.getAppPort(); 41 ENDPOINT_URL = "http://" + host + ":" + port + "/rbacx/ws/userService"; 42 OIA_SYSACCOUNT = itResourceObj.getAppUser(); 43 OIA_PWD = itResourceObj.getAppUserPassword(); 44 } 45 46 public void handleBusinessLogic(String username, Map userMap) { 47 Map existingOIAMap = findUser(username); 48 if (existingOIAMap == null) { 49 createUser(username, userMap); 50 } else { 51 updateUser(username, existingOIAMap, userMap); 52 } 53 } 54 55 public Map findUser(String username) { 56 logger.debug("Entering findUser(String username)"); 57 Map origOiaAttrValueMap = new HashMap(); 58 try { 59 SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory 60 .newInstance(); 61 SOAPConnection connection = soapConnectionFactory 62 .createConnection(); 63 MessageFactory messageFactory = MessageFactory.newInstance(); 64 SOAPMessage message = messageFactory.createMessage(); 65 SOAPHeader header = message.getSOAPHeader(); 66 SOAPBody body = message.getSOAPBody(); 67 QName bodyName = new QName( 68 OIAIntegrationConstants.OIA_SERVICE_NAMESPACE, "findUsers", 69 "ser"); 70 SOAPBodyElement bodyElement = body.addBodyElement(bodyName); 71 QName name = new QName("in0"); 72 SOAPElement symbol = bodyElement.addChildElement(name); 73 symbol.addTextNode(username); 74 // 75 // Add security header. 76 // 77 QName securityQName = new QName( 78 OIAIntegrationConstants.SECURITY_NAMESPACE, "Security"); 79 SOAPElement security = header.addChildElement(securityQName); 80 81 QName tokenQName = new QName( 82 OIAIntegrationConstants.SECURITY_NAMESPACE, "UsernameToken"); 83 SOAPElement token = security.addChildElement(tokenQName); 84 85 QName userQName = new QName( 86 OIAIntegrationConstants.SECURITY_NAMESPACE, "Username"); 87 SOAPElement userName = token.addChildElement(userQName); 88 userName.addTextNode(OIA_SYSACCOUNT); 89 90 QName pwdQName = new QName( 91 OIAIntegrationConstants.SECURITY_NAMESPACE, "Password"); 92 SOAPElement password = token.addChildElement(pwdQName); 93 password.setAttribute("Type", OIAIntegrationConstants.PWD_TYPE); 94 password.addTextNode(OIA_PWD); 95 // 96 // Connect to endpoint, send SOAP request and receive response. 97 // 98 URL endpoint = new URL(ENDPOINT_URL); 99 SOAPMessage response = connection.call(message, endpoint); 100 connection.close(); 101 SOAPBody soapBody = response.getSOAPBody(); 102 SOAPFault fault = soapBody.getFault(); 103 if (fault != null) { 104 throw new Exception(fault.getFaultString()); 105 } 106 String soapBodyString = soapBody.getNodeValue(); 107 org.w3c.dom.Node subChildNode = null; 108 logger.debug("Node Value--->" + soapBodyString); 109 NodeList nodes = soapBody.getChildNodes(); 110 111 String[] customPropList = new String[20]; 112 for (int i = 0; i < nodes.getLength(); i++) { 113 org.w3c.dom.Node node = nodes.item(i); 114 logger.debug("node.getLocalName()--->" + node.getLocalName()); 115 logger.debug("node.getTextContent().trim()---> " 116 + node.getTextContent().trim()); 117 if (node.getLocalName().equalsIgnoreCase("findUsersResponse")) { 118 String nodeText = node.getTextContent().trim(); 119 if ((nodeText != null) 120 && (!(nodeText.equalsIgnoreCase("")))) { 121 logger.debug("User Exist in OIA"); 122 } else { 123 logger.debug("User Does not Exist in OIA"); 124 return null; 125 } 126 } 127 if (node.getNodeType() == Node.ELEMENT_NODE) { 128 NodeList childNodes = node.getChildNodes(); 129 for (int j = 0; j < childNodes.getLength(); j++) { 130 org.w3c.dom.Node childNode = childNodes.item(j); 131 132 logger.debug("childNode.getLocalName()--->" 133 + childNode.getLocalName()); 134 logger.debug("childNode.getTextContent().trim()---> " 135 + childNode.getTextContent().trim()); 136 NodeList subChildNodes = childNode.getChildNodes(); 137 for (int k = 0; k < subChildNodes.getLength(); k++) { 138 subChildNode = subChildNodes.item(k); 139 logger.debug("subChildNode.getLocalName() ---> " 140 + subChildNode.getLocalName()); 141 logger.debug("subChildNode.subSubChildNode.getNodeType()---> " 142 + subChildNode.getNodeType()); 143 logger.debug("subChildNode.getTextContent().trim()---> " 144 + subChildNode.getTextContent().trim()); 145 NodeList subSubChildNodes = subChildNode 146 .getChildNodes(); 147 for (int l = 0; l < subSubChildNodes.getLength(); l++) { 148 org.w3c.dom.Node subSubChildNode = subSubChildNodes 149 .item(l); 150 String subSubChildNodeLocalName = subSubChildNode 151 .getLocalName().trim(); 152 String subSubChildNodeText = subSubChildNode 153 .getTextContent().trim(); 154 logger.debug("subSubChildNode.subSubChildNode.getNodeType()---> " 155 + subSubChildNode.getNodeType()); 156 logger.debug("subSubChildNode.getLocalName()---> " 157 + subSubChildNodeLocalName); 158 logger.debug("subSubChildNode.getTextContent().trim()---> " 159 + subSubChildNodeText); 160 if ((subSubChildNodeLocalName != null) 161 && (!(subSubChildNodeLocalName 162 .equalsIgnoreCase(OIAIntegrationConstants.CUSTOMPROPATTRIBUTE)))) { 163 origOiaAttrValueMap.put( 164 subSubChildNodeLocalName, 165 subSubChildNodeText); 166 } 167 NodeList thirdChildNodes = subSubChildNode 168 .getChildNodes(); 169 // Below logic iterates custom properties and 170 // sets it in the right index 171 int index = 0; 172 for (int m = 0; m < thirdChildNodes.getLength(); m++) { 173 org.w3c.dom.Node thirdChildNode = thirdChildNodes 174 .item(m); 175 if (thirdChildNode != null) { 176 String thrdChildNodeName = thirdChildNode 177 .getLocalName(); 178 String thrdChildNodeNameText = thirdChildNode 179 .getTextContent().trim(); 180 logger.debug("thrdChildNodeName---> " 181 + thrdChildNodeName); 182 logger.debug("thrdChildNodeNameText---> " 183 + thrdChildNodeNameText); 184 if ((thrdChildNodeName != null) 185 && (thrdChildNodeName 186 .equalsIgnoreCase("string"))) { 187 logger.debug("index-->" + index); 188 customPropList[index] = thrdChildNodeNameText; 189 index = index + 1; 190 } 191 origOiaAttrValueMap 192 .put(OIAIntegrationConstants.CUSTOMPROPATTRIBUTE, 193 customPropList); 194 } 195 }// End of Below logic iterates custom 196 // properties and sets it in the right index 197 } 198 } 199 } 200 } 201 } 202 logger.debug("oiaAttrValueMap--->" + origOiaAttrValueMap); 203 } catch (Exception ex) { 204 ex.printStackTrace(); 205 } 206 return origOiaAttrValueMap; 207 } 208 209 public boolean createUser(String username, 210 Map<String, String> oiaAttrValueMap) { 211 boolean flag = false; 212 try { 213 SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory 214 .newInstance(); 215 SOAPConnection connection = soapConnectionFactory 216 .createConnection(); 217 MessageFactory messageFactory = MessageFactory.newInstance(); 218 SOAPMessage message = messageFactory.createMessage(); 219 SOAPHeader header = message.getSOAPHeader(); 220 SOAPBody body = message.getSOAPBody(); 221 QName bodyName = new QName( 222 OIAIntegrationConstants.OIA_SERVICE_NAMESPACE, 223 "createUser", "ser"); 224 SOAPBodyElement bodyElement = body.addBodyElement(bodyName); 225 QName name = new QName("http://domain.api.rbacx.vaau.com", "in0"); 226 SOAPElement symbol = bodyElement.addChildElement(name); 227 228 // /////////////////////////////////////////////////////////////////// 229 Set attrSet = oiaAttrValueMap.keySet(); 230 Iterator iterator = attrSet.iterator(); 231 while (iterator.hasNext()) { 232 String attributeName = iterator.next().toString().trim(); 233 if (OIAIntegrationConstants.allowedAttrSet 234 .contains(attributeName)) { 235 logger.debug("attributeName--->" + attributeName); 236 QName attrNameQ = new QName(attributeName); 237 SOAPElement attrNameElement = symbol 238 .addChildElement(attrNameQ); 239 String attrValue = oiaAttrValueMap.get(attributeName) 240 .toString(); 241 logger.debug("attrValue--->" + attrValue); 242 attrNameElement.addTextNode(attrValue); 243 } 244 } 245 QName customPropNameQ = new QName( 246 OIAIntegrationConstants.CUSTOMPROPATTRIBUTE); 247 SOAPElement customPropertyElement = symbol 248 .addChildElement(customPropNameQ); 249 String[] customPropList = new String[20]; 250 SOAPElement stringElement = null; 251 QName stringQ = new QName("string"); 252 for (int i = 0; i < customPropList.length; i++) { 253 stringElement = customPropertyElement.addChildElement(stringQ); 254 String string = ""; 255 if (i == 19) { 256 string = oiaAttrValueMap.get( 257 OIAIntegrationConstants.USR_KEY_ATTRIBUTE) 258 .toString(); 259 } 260 logger.debug("custom prop-->" + i + "--->" + string); 261 if (string != null) { 262 stringElement.addTextNode(string); 263 } 264 logger.debug("added custom prop-->" + i); 265 } 266 267 QName securityQName = new QName( 268 OIAIntegrationConstants.SECURITY_NAMESPACE, "Security"); 269 SOAPElement security = header.addChildElement(securityQName); 270 QName tokenQName = new QName( 271 OIAIntegrationConstants.SECURITY_NAMESPACE, "UsernameToken"); 272 SOAPElement token = security.addChildElement(tokenQName); 273 QName userQName = new QName( 274 OIAIntegrationConstants.SECURITY_NAMESPACE, "Username"); 275 SOAPElement userName = token.addChildElement(userQName); 276 userName.addTextNode(OIA_SYSACCOUNT); 277 QName pwdQName = new QName( 278 OIAIntegrationConstants.SECURITY_NAMESPACE, "Password"); 279 SOAPElement password = token.addChildElement(pwdQName); 280 password.setAttribute("Type", OIAIntegrationConstants.PWD_TYPE); 281 password.addTextNode(OIA_PWD); 282 283 URL endpoint = new URL(ENDPOINT_URL); 284 SOAPMessage response = connection.call(message, endpoint); 285 connection.close(); 286 SOAPBody soapBody = response.getSOAPBody(); 287 SOAPFault fault = soapBody.getFault(); 288 if (fault != null) { 289 throw new Exception(fault.getFaultString()); 290 } else { 291 flag = true; 292 } 293 logger.debug("Done creating"); 294 } catch (Exception e) { 295 e.printStackTrace(); 296 } 297 return flag; 298 } 299 300 public boolean updateUser(String username, Map origOiaAttrValueMap, 301 Map changedMap) { 302 boolean flag = false; 303 try { 304 SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory 305 .newInstance(); 306 SOAPConnection connection = soapConnectionFactory 307 .createConnection(); 308 MessageFactory messageFactory = MessageFactory.newInstance(); 309 SOAPMessage message = messageFactory.createMessage(); 310 SOAPHeader header = message.getSOAPHeader(); 311 SOAPBody body = message.getSOAPBody(); 312 QName bodyName = new QName( 313 OIAIntegrationConstants.OIA_SERVICE_NAMESPACE, 314 "updateUser", "ser"); 315 SOAPBodyElement bodyElement = body.addBodyElement(bodyName); 316 QName name = new QName("http://domain.api.rbacx.vaau.com", "in0"); 317 SOAPElement symbol = bodyElement.addChildElement(name); 318 Set attrSet = origOiaAttrValueMap.keySet(); 319 Iterator iterator = attrSet.iterator(); 320 while (iterator.hasNext()) { 321 String attributeName = iterator.next().toString().trim();// .toString().trim(); 322 logger.debug("attributeName--->" + attributeName); 323 if (OIAIntegrationConstants.allowedAttrSet 324 .contains(attributeName)) { 325 QName attrNameQ = new QName(attributeName); 326 SOAPElement attrNameElement = symbol 327 .addChildElement(attrNameQ); 328 if (attributeName 329 .equalsIgnoreCase(OIAIntegrationConstants.CUSTOMPROPATTRIBUTE)) { 330 String[] customPropList = (String[]) origOiaAttrValueMap 331 .get(attributeName); 332 logger.debug("customPropList in updateUser -->" 333 + customPropList); 334 for (int i = 0; i < customPropList.length; i++) { 335 QName stringQ = new QName("string"); 336 SOAPElement stringElement = attrNameElement 337 .addChildElement(stringQ); 338 String string = null; 339 if ((changedMap 340 .containsKey(OIAIntegrationConstants.USR_KEY_ATTRIBUTE)) 341 && (i == 19)) { 342 string = changedMap 343 .get(OIAIntegrationConstants.USR_KEY_ATTRIBUTE) 344 .toString(); 345 } else { 346 string = customPropList[i]; 347 } 348 logger.debug("custom prop-->" + i + "--->" + string); 349 stringElement.addTextNode(string); 350 logger.debug("added custom prop-->" + i); 351 } 352 } 353 String attrValue = null; 354 if (changedMap.containsKey(attributeName)) { 355 logger.debug("changedMap.containsKey(attributeName)->" 356 + attributeName); 357 attrValue = changedMap.get(attributeName).toString() 358 .trim(); 359 } else { 360 attrValue = origOiaAttrValueMap.get(attributeName) 361 .toString().trim(); 362 } 363 logger.debug("attrValue-->" + attrValue); 364 if ((attrValue != null) 365 && (!(attrValue.equalsIgnoreCase("")))) { 366 attrNameElement.addTextNode(attrValue); 367 } 368 369 } 370 } 371 372 QName securityQName = new QName( 373 OIAIntegrationConstants.SECURITY_NAMESPACE, "Security"); 374 SOAPElement security = header.addChildElement(securityQName); 375 QName tokenQName = new QName( 376 OIAIntegrationConstants.SECURITY_NAMESPACE, "UsernameToken"); 377 SOAPElement token = security.addChildElement(tokenQName); 378 QName userQName = new QName( 379 OIAIntegrationConstants.SECURITY_NAMESPACE, "Username"); 380 SOAPElement userName = token.addChildElement(userQName); 381 userName.addTextNode(OIA_SYSACCOUNT); 382 QName pwdQName = new QName( 383 OIAIntegrationConstants.SECURITY_NAMESPACE, "Password"); 384 SOAPElement password = token.addChildElement(pwdQName); 385 password.setAttribute("Type", OIAIntegrationConstants.PWD_TYPE); 386 password.addTextNode(OIA_PWD); 387 URL endpoint = new URL(ENDPOINT_URL); 388 SOAPMessage response = connection.call(message, endpoint); 389 connection.close(); 390 SOAPBody soapBody = response.getSOAPBody(); 391 SOAPFault fault = soapBody.getFault(); 392 if (fault != null) { 393 throw new Exception(fault.getFaultString()); 394 } else { 395 flag = true; 396 } 397 logger.debug("Done updating"); 398 399 } catch (Exception e) { 400 e.printStackTrace(); 401 } 402 return flag; 403 } 404 } 405
OIADBConnector class contains some operations related to OIA DB pertaining to custom properties
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 package com.dubey.deepak.oim.oia.intg; 6 7 import java.sql.Connection; 8 import java.sql.DriverManager; 9 import java.sql.PreparedStatement; 10 import java.sql.ResultSet; 11 import java.sql.SQLException; 12 13 import com.thortech.util.logging.Logger; 14 15 /** 16 * 17 * @author ddubey002 18 */ 19 public class OIADBConnector { 20 21 private static Logger logger = OIAIntegrationConstants.logger; 22 23 private Connection getConnection(ItResourceObj itResourceObj) { 24 logger.debug("Entering getConnection(ItResourceObj itResourceObj) of OIADBConnector"); 25 Connection connection = null; 26 try { 27 Class.forName(OIAIntegrationConstants.ORACLEDRIVER); 28 // jdbc:oracle:thin:@localhost:1521:ORCL; 29 String jdbcURL = "jdbc:oracle:thin:@" + itResourceObj.getDBHost() 30 + ":" + itResourceObj.getDBPort() + ":" 31 + itResourceObj.getDBSid(); 32 connection = DriverManager.getConnection(jdbcURL, 33 itResourceObj.getDBUser(), 34 itResourceObj.getDBUserPassword()); 35 } catch (SQLException ex) { 36 logger.debug("SQLException ocurred in getConnection -->" 37 + ex.getMessage()); 38 ex.printStackTrace(); 39 } catch (ClassNotFoundException ex) { 40 logger.debug("ClassNotFoundException ocurred in getConnection -->" 41 + ex.getMessage()); 42 ex.printStackTrace(); 43 } 44 logger.debug("Exiting getConnection(ItResourceObj itResourceObj) of OIADBConnector"); 45 return connection; 46 } 47 48 private void closeConnection(Connection connection) { 49 logger.debug("Entering closeConnection()"); 50 try { 51 if ((connection != null) && (!(connection.isClosed()))) { 52 connection.close(); 53 } 54 } catch (SQLException sQLException) { 55 logger.debug("SQLException ocurred in getConnection -->" 56 + sQLException.getMessage()); 57 sQLException.printStackTrace(); 58 } 59 logger.debug("Exiting closeConnection()"); 60 } 61 62 public boolean updateUserName(ItResourceObj itResourceObj, 63 String oldUserName, String newUserName) { 64 logger.debug("Entering updateUserName(ItResourceObj itResourceObj , String oldUserName , String newUserName)"); 65 logger.debug("oldLoginName in updateUserName -->" + oldUserName); 66 logger.debug("newUserName in updateUserName -->" + newUserName); 67 PreparedStatement preparedStatement = null; 68 PreparedStatement preparedStatement2 = null; 69 String updateQueryGlobal = "UPDATE RBACXSERVICE.GLOBALUSERS set USERNAME = ? WHERE USERNAME = ?"; 70 String updateQueryRBX = "UPDATE RBACXSERVICE.RBX_USERS set USERNAME = ? WHERE USERNAME = ?"; 71 Connection connection = null; 72 boolean flag = false; 73 try { 74 connection = getConnection(itResourceObj); 75 preparedStatement = connection.prepareStatement(updateQueryGlobal); 76 preparedStatement2 = connection.prepareStatement(updateQueryRBX); 77 78 logger.debug("before preparedStatement"); 79 preparedStatement.setString(1, newUserName); 80 preparedStatement2.setString(1, newUserName); 81 preparedStatement.setString(2, oldUserName); 82 preparedStatement2.setString(2, oldUserName); 83 int result = preparedStatement.executeUpdate(); // executeUpdate(); 84 preparedStatement2.executeUpdate(); 85 logger.debug("after preparedStatement execute result-->" + result); 86 preparedStatement.close(); 87 preparedStatement2.close(); 88 connection.commit(); 89 if (result == 1) 90 flag = true; 91 92 } catch (SQLException ex) { 93 logger.debug("SQLException ocurred in updateUserName -->" 94 + ex.getMessage()); 95 ex.printStackTrace(); 96 } catch (Exception ex) { 97 logger.debug("Exception ocurred in updateUserName -->" 98 + ex.getMessage()); 99 ex.printStackTrace(); 100 } finally { 101 try { 102 preparedStatement.close(); 103 } catch (SQLException ex) { 104 logger.debug("error closing preparedStatement-->" 105 + ex.toString()); 106 } 107 closeConnection(connection); 108 } 109 logger.debug("Exiting updateUserName(ItResourceObj itResourceObj , String oldUserName , String newUserName)"); 110 return flag; 111 } 112 113 public String getID(ItResourceObj itResourceObj, String oimLoginName) { 114 logger.debug("Entering getID(ItResourceObj itResourceObj, String oimLoginName)"); 115 String oiaID = null; 116 PreparedStatement preparedStatement = null; 117 ResultSet resultSet = null; 118 String selectQuery = "SELECT GLOBALUSERKEY FROM GLOBALUSERS WHERE USERNAME=?"; 119 Connection connection = null; 120 try { 121 connection = getConnection(itResourceObj); 122 preparedStatement = connection.prepareStatement(selectQuery); 123 logger.debug("before preparedStatement"); 124 preparedStatement.setString(1, oimLoginName); 125 resultSet = preparedStatement.executeQuery(); 126 logger.debug("after preparedStatement execute"); 127 while (resultSet.next()) { 128 oiaID = resultSet.getString("GLOBALUSERKEY"); 129 logger.debug("oiaID in DB Connector-->" + oiaID); 130 } 131 } catch (SQLException ex) { 132 logger.debug("SQLException ocurred in getID -->" + ex.getMessage()); 133 ex.printStackTrace(); 134 } catch (Exception ex) { 135 logger.debug("Exception ocurred in getConnection -->" 136 + ex.getMessage()); 137 ex.printStackTrace(); 138 } finally { 139 closeConnection(connection); 140 } 141 logger.debug("Exiting getID ( String oimUSKKey , String oimLoginName)"); 142 return oiaID; 143 144 } 145 } 146
OIA_OIM_Util Class
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 package com.dubey.deepak.oim.oia.intg; 6 7 import java.util.HashMap; 8 import java.util.Hashtable; 9 import java.util.Map; 10 11 import Thor.API.tcResultSet; 12 import Thor.API.tcUtilityFactory; 13 import Thor.API.Exceptions.tcAPIException; 14 import Thor.API.Exceptions.tcColumnNotFoundException; 15 import Thor.API.Exceptions.tcInvalidLookupException; 16 import Thor.API.Operations.tcLookupOperationsIntf; 17 18 //import java.util.logging.Level; 19 //import java.util.logging.Logger; 20 import com.thortech.util.logging.Logger; 21 import com.thortech.xl.dataaccess.tcDataProvider; 22 import com.thortech.xl.util.adapters.tcUtilXellerateOperations; 23 24 public final class OIA_OIM_Util { 25 26 private static Logger logger = OIAIntegrationConstants.logger; 27 28 public OIA_OIM_Util() { 29 // this.dataProvider = dataProvider; 30 } 31 32 // private tcDataProvider dataProvider = null; 33 34 public ItResourceObj initITResourceObj(tcDataProvider dataProvider, 35 String itResourceName) { 36 logger.debug("Entering initITResourceObj(String itResourceName)"); 37 ItResourceObj itResourceObj = null; 38 try { 39 Hashtable itResourceMap = tcUtilXellerateOperations 40 .getITAssetProperties(dataProvider, itResourceName); 41 logger.debug(" Got the itResourceMap -->" + itResourceMap); 42 itResourceObj = new ItResourceObj(); 43 44 itResourceObj.setAppHost(itResourceMap.get("AppHost").toString()); 45 itResourceObj.setAppPort(itResourceMap.get("AppPort").toString()); 46 itResourceObj.setAppUser(itResourceMap.get("AppUser").toString()); 47 itResourceObj.setAppUserPassword(itResourceMap.get( 48 "AppUserPassword").toString()); 49 // logger.debug(itResourceName) 50 51 itResourceObj.setDBHost(itResourceMap.get("DBHost").toString()); 52 itResourceObj.setDBPort(itResourceMap.get("DBPort").toString()); 53 itResourceObj.setDBType(itResourceMap.get("DBType").toString()); 54 itResourceObj.setDBSid(itResourceMap.get("DBSid").toString()); 55 itResourceObj.setDBUser(itResourceMap.get("DBUser").toString()); 56 itResourceObj.setDBUserPassword(itResourceMap.get("DBUserPassword") 57 .toString()); 58 59 } catch (Exception ex) { 60 logger.debug("Exception occurred in initITResourceObj -->" 61 + ex.getMessage()); 62 ex.printStackTrace(); 63 } 64 logger.debug("Exiting initITResourceObj(String itResourceName)"); 65 return itResourceObj; 66 67 } 68 69 private boolean isNullOrBlank(String pstrToCheck) { 70 if (pstrToCheck == null || pstrToCheck.trim().equals("")) { 71 return true; 72 } 73 return false; 74 } 75 76 public Map loadMetaDataLookup(tcDataProvider dataProvider) throws Exception { 77 logger.debug("Entering loadMetaDataLookup(tcDataProvider dataProvider) of OIA_OIM_Util"); 78 79 tcResultSet MetadataMappings = null; 80 81 Map metaDataHash = null; 82 tcLookupOperationsIntf lookupIntf = null; 83 84 try { 85 lookupIntf = (tcLookupOperationsIntf) tcUtilityFactory.getUtility( 86 dataProvider, OIAIntegrationConstants.thorLookOperations); 87 MetadataMappings = lookupIntf 88 .getLookupValues(OIAIntegrationConstants.lkupMetadataMappings); 89 metaDataHash = new HashMap(); 90 for (int i = 0; i < MetadataMappings.getRowCount(); i++) { 91 MetadataMappings.goToRow(i); 92 metaDataHash 93 .put(MetadataMappings 94 .getStringValue(OIAIntegrationConstants.LOOKUPDECODEVALUE), 95 MetadataMappings 96 .getStringValue(OIAIntegrationConstants.LOOKUPCODEKEY)); 97 } // for close 98 } catch (tcAPIException ex) { 99 logger.debug("Exception occurred in loadMetaDataLookup -->" 100 + ex.getMessage()); 101 ex.printStackTrace(); 102 } catch (tcInvalidLookupException ex) { 103 104 logger.debug("Exception occurred in loadMetaDataLookup -->" 105 + ex.getMessage()); 106 ex.printStackTrace(); 107 108 } catch (tcColumnNotFoundException ex) { 109 110 logger.debug("Exception occurred in loadMetaDataLookup -->" 111 + ex.getMessage()); 112 ex.printStackTrace(); 113 114 } catch (Exception ex) { 115 logger.debug("Exception occurred in loadMetaDataLookup -->" 116 + ex.getMessage()); 117 ex.printStackTrace(); 118 119 } 120 logger.debug("Exiting loadMetaDataLookup(tcDataProvider dataProvider) of OIA_OIM_Util"); 121 return metaDataHash; 122 } 123 } 124
ItResourceObj model class representing an IT Resource Object
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package com.dubey.deepak.oim.oia.intg; 7 8 /** 9 * 10 * @author ddubey002 11 */ 12 public class ItResourceObj { 13 private String AppHost = "localhost"; 14 private String AppPort = "9080"; 15 private String AppUser = "rbacxadmin"; 16 private String AppUserPassword = "password"; 17 private String DBHost = "localhost"; 18 private String DBPort = "1521"; 19 private String DBUser = "rbacxservice"; 20 private String DBUserPassword = "rbacxservice"; 21 private String DBSid = "orcl"; 22 private String DBType = "oracle"; 23 24 /** 25 * @return the AppHost 26 */ 27 public String getAppHost() { 28 return AppHost; 29 } 30 31 /** 32 * @param AppHost 33 * the AppHost to set 34 */ 35 public void setAppHost(String AppHost) { 36 this.AppHost = AppHost; 37 } 38 39 /** 40 * @return the AppPort 41 */ 42 public String getAppPort() { 43 return AppPort; 44 } 45 46 /** 47 * @param AppPort 48 * the AppPort to set 49 */ 50 public void setAppPort(String AppPort) { 51 this.AppPort = AppPort; 52 } 53 54 /** 55 * @return the AppUser 56 */ 57 public String getAppUser() { 58 return AppUser; 59 } 60 61 /** 62 * @param AppUser 63 * the AppUser to set 64 */ 65 public void setAppUser(String AppUser) { 66 this.AppUser = AppUser; 67 } 68 69 /** 70 * @return the AppUserPassword 71 */ 72 public String getAppUserPassword() { 73 return AppUserPassword; 74 } 75 76 /** 77 * @param AppUserPassword 78 * the AppUserPassword to set 79 */ 80 public void setAppUserPassword(String AppUserPassword) { 81 this.AppUserPassword = AppUserPassword; 82 } 83 84 /** 85 * @return the DBHost 86 */ 87 public String getDBHost() { 88 return DBHost; 89 } 90 91 /** 92 * @param DBHost 93 * the DBHost to set 94 */ 95 public void setDBHost(String DBHost) { 96 this.DBHost = DBHost; 97 } 98 99 /** 100 * @return the DBPort 101 */ 102 public String getDBPort() { 103 return DBPort; 104 } 105 106 /** 107 * @param DBPort 108 * the DBPort to set 109 */ 110 public void setDBPort(String DBPort) { 111 this.DBPort = DBPort; 112 } 113 114 /** 115 * @return the DBUser 116 */ 117 public String getDBUser() { 118 return DBUser; 119 } 120 121 /** 122 * @param DBUser 123 * the DBUser to set 124 */ 125 public void setDBUser(String DBUser) { 126 this.DBUser = DBUser; 127 } 128 129 /** 130 * @return the DBUserPassword 131 */ 132 public String getDBUserPassword() { 133 return DBUserPassword; 134 } 135 136 /** 137 * @param DBUserPassword 138 * the DBUserPassword to set 139 */ 140 public void setDBUserPassword(String DBUserPassword) { 141 this.DBUserPassword = DBUserPassword; 142 } 143 144 /** 145 * @return the DBSid 146 */ 147 public String getDBSid() { 148 return DBSid; 149 } 150 151 /** 152 * @param DBSid 153 * the DBSid to set 154 */ 155 public void setDBSid(String DBSid) { 156 this.DBSid = DBSid; 157 } 158 159 /** 160 * @return the DBType 161 */ 162 public String getDBType() { 163 return DBType; 164 } 165 166 /** 167 * @param DBType 168 * the DBType to set 169 */ 170 public void setDBType(String DBType) { 171 this.DBType = DBType; 172 } 173 174 } 175
OIAIntegrationConstants
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 package com.dubey.deepak.oim.oia.intg; 6 7 import java.util.Arrays; 8 import java.util.HashSet; 9 10 import com.thortech.util.logging.Logger; 11 12 /** 13 * 14 * @author ddubey002 15 */ 16 public interface OIAIntegrationConstants { 17 18 public static final String OIAIDATTRIBUTE = "USR_UDF_OIAID"; 19 public static final Logger logger = Logger.getLogger("OIAUSERSYNC"); 20 public static final String USR_KEY_ATTRIBUTE = "customProperty20"; 21 public static final String CUSTOMPROPATTRIBUTE = "customProperties"; 22 public static final String[] allowedStringAttributes = { "username", 23 "firstName", "lastName", "fullName", "middleName", "employeeId", 24 "employeeType", "jobCodes", "title", "officeName", "building", 25 "businessApprover", "city", "comments", "countryOrRegion", 26 CUSTOMPROPATTRIBUTE, "delegate", "department", "description", 27 "extension", "fax", "location", "manager", "mobile", "pager", 28 "phone", "primaryEmail", "secondaryEmail", 29 "serviceDeskTicketNumber", "stateOrProvince", "street", 30 "zipOrPostalCode" }; 31 // ,"","","","","","","","","","","",""}; 32 public static final HashSet<String> allowedAttrSet = new HashSet<String>( 33 Arrays.asList(allowedStringAttributes)); 34 public static final String SECURITY_NAMESPACE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"; 35 public static final String PWD_TYPE = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"; 36 public static final String OIA_SERVICE_NAMESPACE = "http://service.api.rbacx.vaau.com"; 37 /** 38 * Constant String which hold the name of metadatamappings lookup 39 */ 40 public static final String lkupMetadataMappings = "Lookup.oim.oia.metadatamappings"; 41 /** 42 * Constant string which holds the name of the class which will be used for 43 * lookup operations 44 */ 45 public static final String thorLookOperations = "Thor.API.Operations.tcLookupOperationsIntf"; 46 public static final String OIMUSERLOGINATTRIBUTE = "USR_LOGIN"; 47 public static final String OIMUSERKEYATTRIBUTE = "USR_KEY"; 48 public static final String LOOKUPCODEKEY = "Lookup Definition.Lookup Code Information.Code Key"; 49 public static final String LOOKUPDECODEVALUE = "Lookup Definition.Lookup Code Information.Decode"; 50 public static final String ITRESOURCENAME = "OIA IT Server"; 51 public static final String ORACLEDRIVER = "oracle.jdbc.driver.OracleDriver"; 52 public static final String building = "building"; 53 public static final String businessApprover = "businessApprover"; 54 public static final String city = "city"; 55 public static final String comments = "comments"; 56 public static final String countryOrRegion = "countryOrRegion"; 57 public static final String createDate = "createDate"; 58 public static final String createUser = "createUser"; 59 public static final String customProperties = "customProperties"; 60 public static final String delegate = "delegate"; 61 public static final String deletedDate = "deletedDate"; 62 public static final String department = "department"; 63 public static final String description = "description"; 64 public static final String disabledDate = "disabledDate"; 65 public static final String employeeId = "employeeId"; 66 public static final String employeeType = "employeeType"; 67 public static final String enabledDate = "enabledDate"; 68 public static final String endDate = "endDate"; 69 public static final String extension = "extension"; 70 public static final String fax = "fax"; 71 public static final String firstName = "firstName"; 72 public static final String fullName = "fullName"; 73 public static final String id = "id"; 74 public static final String jobCodes = "jobCodes"; 75 public static final String lastName = "lastName"; 76 public static final String location = "location"; 77 public static final String manager = "manager"; 78 public static final String middleName = "middleName"; 79 public static final String mobile = "mobile"; 80 public static final String name = "name"; 81 public static final String officeName = "officeName"; 82 public static final String pager = "pager"; 83 public static final String phone = "phone"; 84 public static final String primaryEmail = "primaryEmail"; 85 public static final String secondaryEmail = "secondaryEmail"; 86 public static final String serviceDeskTicketNumber = "serviceDeskTicketNumber"; 87 public static final String startDate = "startDate"; 88 public static final String stateOrProvince = "stateOrProvince"; 89 public static final String statusKey = "statusKey"; 90 public static final String street = "street"; 91 public static final String suspended = "suspended"; 92 public static final String suspendedDate = "suspendedDate"; 93 public static final String technicalApprover = "technicalApprover"; 94 public static final String title = "title"; 95 public static final String updateDate = "updateDate"; 96 public static final String updateUser = "updateUser"; 97 public static final String userData = "userData"; 98 public static final String username = "username"; 99 public static final String zipOrPostalCode = "zipOrPostalCode"; 100 } 101
Finally the Tester Class to test everything standalone.
1 /* 2 * To change this template, choose Tools | Templates 3 * and open the template in the editor. 4 */ 5 6 package com.dubey.deepak.oim.oia.intg; 7 8 9 /** 10 * 11 * @author ddubey002 12 */ 13 public class Tester { 14 public static void main(String[] args) { 15 16 OIADBConnector oIADBConnector = new OIADBConnector(); 17 oIADBConnector.updateUserName(new ItResourceObj(), "DEMOUSER4", 18 "qwerty"); 19 20 // OIARequest oIARequest = new OIARequest(new ItResourceObj()); 21 // String username = "werergert"; 22 // Map userMap = new HashMap(); 23 // userMap.put("username", username); 24 // userMap.put("firstName", "ggggggggg"); 25 // userMap.put("lastName", "opopopo"); 26 // 27 // userMap.put("fullName", "Value123"); 28 // userMap.put("middleName", "Value123"); 29 // userMap.put("employeeId", "Value123"); 30 // userMap.put("employeeType", "Value123"); 31 // userMap.put("jobCodes", "Value123"); 32 // userMap.put("title", "Value123"); 33 // userMap.put("officeName", "Value123"); 34 // userMap.put("city", "jiojjijijo"); 35 // userMap.put("comments", "okopkopsfsd"); 36 // userMap.put(OIAIntegrationConstants.USR_KEY_ATTRIBUTE, "USR_KEY"); 37 // oIARequest.handleBusinessLogic(username, userMap); 38 39 } 40 41 } 42
Comments
Post a Comment