/** * INTERNAL: Lazy initialization of xmlTypeFactory allows to avoid loading xdb-dependent class * XMLTypeFactoryImpl unless xdb is used. * * @return XMLTypeFactory */ protected XMLTypeFactory getXMLTypeFactory() { if (xmlTypeFactory == null) { String className = "org.eclipse.persistence.internal.platform.database.oracle.xdb.XMLTypeFactoryImpl"; try { if (PrivilegedAccessHelper.shouldUsePrivilegedAccess()) { Class xmlTypeFactoryClass = (Class) AccessController.doPrivileged( new PrivilegedClassForName( className, true, this.getClass().getClassLoader())); Constructor xmlTypeFactoryConstructor = (Constructor) AccessController.doPrivileged( new PrivilegedGetConstructorFor(xmlTypeFactoryClass, new Class[0], true)); xmlTypeFactory = (XMLTypeFactory) AccessController.doPrivileged( new PrivilegedInvokeConstructor(xmlTypeFactoryConstructor, new Object[0])); } else { Class xmlTypeFactoryClass = PrivilegedAccessHelper.getClassForName( className, true, this.getClass().getClassLoader()); Constructor xmlTypeFactoryConstructor = PrivilegedAccessHelper.getConstructorFor(xmlTypeFactoryClass, new Class[0], true); xmlTypeFactory = (XMLTypeFactory) PrivilegedAccessHelper.invokeConstructor( xmlTypeFactoryConstructor, new Object[0]); } } catch (Exception e) { throw QueryException.reflectiveCallOnTopLinkClassFailed(className, e); } } return xmlTypeFactory; }