📄 objectcreator.java
字号:
/** * Converts the given IDL name to class name. * * @param IDL the idl name. * */ protected static String toClassName(String prefix, String IDL) { String s = IDL; int a = s.indexOf(':') + 1; int b = s.lastIndexOf(':'); s = IDL.substring(a, b); if (s.startsWith(OMG_PREFIX)) s = prefix + s.substring(OMG_PREFIX.length()); return s.replace('/', '.'); } /** * Converts the given IDL name to class name and tries to load the matching * class. The OMG prefix (omg.org) is replaced by the java prefix org.omg. No * other prefixes are added. * * @param IDL the idl name. * * @return the matching class or null if no such is available. */ public static Class Idl2class(String IDL) { synchronized (m_classes) { Class c = (Class) m_classes.get(IDL); if (c != null) return c; else { String s = IDL; int a = s.indexOf(':') + 1; int b = s.lastIndexOf(':'); s = IDL.substring(a, b); if (s.startsWith(OMG_PREFIX)) s = JAVA_PREFIX + s.substring(OMG_PREFIX.length()); String cn = s.replace('/', '.'); try { c = forName(cn); m_classes.put(IDL, c); return c; } catch (ClassNotFoundException ex) { return null; } } } } /** * Converts the given IDL name to class name, tries to load the matching class * and create an object instance with parameterless constructor. The OMG * prefix (omg.org) is replaced by the java prefix org.omg. No other prefixes * are added. * * @param IDL the idl name. * * @return instantiated object instance or null if such attempt was not * successful. */ public static java.lang.Object Idl2Object(String IDL) { Class cx = Idl2class(IDL); try { if (cx != null) return cx.newInstance(); else return null; } catch (Exception ex) { return null; } } /** * Convert the class name to IDL or RMI name (repository id). If the class * inherits from IDLEntity, ValueBase or SystemException, returns repository * Id in the IDL:(..) form. If it does not, returns repository Id in the * RMI:(..) form. * * @param cx the class for that the name must be computed. * * @return the idl or rmi name. */ public static synchronized String getRepositoryId(Class cx) { String name = (String) m_names.get(cx); if (name != null) return name; String cn = cx.getName(); if (!(IDLEntity.class.isAssignableFrom(cx) || ValueBase.class.isAssignableFrom(cx) || SystemException.class.isAssignableFrom(cx))) { // Not an IDL entity. name = Util.createValueHandler().getRMIRepositoryID(cx); } else { if (cn.startsWith(JAVA_PREFIX)) cn = OMG_PREFIX + cn.substring(JAVA_PREFIX.length()).replace('.', '/'); else if (cn.startsWith(CLASSPATH_PREFIX)) cn = OMG_PREFIX + cn.substring(CLASSPATH_PREFIX.length()).replace('.', '/'); name = "IDL:" + cn + ":1.0"; } m_names.put(cx, name); return name; } /** * Insert the passed parameter into the given Any, assuming that the helper * class is available. The helper class must have the "Helper" suffix and be * in the same package as the class of the object being inserted. * * @param into the target to insert. * * @param object the object to insert. It can be any object as far as the * corresponding helper is provided. * * @return true on success, false otherwise. */ public static boolean insertWithHelper(Any into, Object object) { try { String helperClassName = object.getClass().getName() + "Helper"; Class helperClass = forName(helperClassName); Method insert = helperClass.getMethod("insert", new Class[] { Any.class, object.getClass() }); insert.invoke(null, new Object[] { into, object }); return true; } catch (Exception exc) { // Failed due some reason. return false; } } /** * Insert the system exception into the given Any. */ public static boolean insertSysException(Any into, SystemException exception) { try { BufferedCdrOutput output = new BufferedCdrOutput(); String m_exception_id = getRepositoryId(exception.getClass()); output.write_string(m_exception_id); output.write_ulong(exception.minor); CompletionStatusHelper.write(output, exception.completed); String name = getDefaultName(m_exception_id); GeneralHolder h = new GeneralHolder(output); into.insert_Streamable(h); RecordTypeCode r = new RecordTypeCode(TCKind.tk_except); r.setId(m_exception_id); r.setName(name); into.type(r); return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } /** * Get the type name from the IDL string. */ public static String getDefaultName(String idl) { int f1 = idl.lastIndexOf("/"); int p1 = (f1 < 0) ? 0 : f1; int p2 = idl.indexOf(":", p1); if (p2 < 0) p2 = idl.length(); String name = idl.substring(f1 + 1, p2); return name; } /** * Insert this exception into the given Any. On failure, insert the UNKNOWN * exception. */ public static void insertException(Any into, Throwable exception) { boolean ok = false; if (exception instanceof SystemException) ok = insertSysException(into, (SystemException) exception); else if (exception instanceof UserException) ok = insertWithHelper(into, exception); if (!ok) ok = insertSysException(into, new UNKNOWN()); if (!ok) throw new InternalError("Exception wrapping broken"); } /** * Find helper for the class with the given name. */ public static Class findHelper(String idl) { synchronized (m_helpers) { Class c = (Class) m_helpers.get(idl); if (c != null) return c; try { String helper = toHelperName(idl); c = forName(helper); m_helpers.put(idl, c); return c; } catch (Exception ex) { return null; } } } /** * Load the class with the given name. This method tries to use the context * class loader first. If this fails, it searches for the suitable class * loader in the caller stack trace. This method is a central point where all * requests to find a class by name are delegated. */ public static Class forName(String className) throws ClassNotFoundException { try { return Class.forName(className, true, Thread.currentThread().getContextClassLoader()); } catch (ClassNotFoundException nex) { /** * Returns the first user defined class loader on the call stack, or * null when no non-null class loader was found. */ Class[] ctx = VMStackWalker.getClassContext(); for (int i = 0; i < ctx.length; i++) { // Since we live in a class loaded by the bootstrap // class loader, getClassLoader is safe to call without // needing to be wrapped in a privileged action. ClassLoader cl = ctx[i].getClassLoader(); try { if (cl != null) return Class.forName(className, true, cl); } catch (ClassNotFoundException nex2) { // Try next. } } } throw new ClassNotFoundException(className); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -