/** Verify and invoke main if present in the specified class. */ public static void invokeApplicationMain(Class mainClass, String[] args) throws InvocationTargetException, IllegalAccessException, ClassNotFoundException { String err = localStrings.getLocalString("utility.no.main", "", new Object[] {mainClass}); // determine the main method using reflection // verify that it is public static void and takes // String[] as the only argument Method mainMethod = null; try { mainMethod = mainClass.getMethod("main", new Class[] {String[].class}); } catch (NoSuchMethodException msme) { _logger.log(Level.SEVERE, "enterprise_util.excep_in_utility", msme); throw new ClassNotFoundException(err); } // check modifiers: public static int modifiers = mainMethod.getModifiers(); if (!Modifier.isPublic(modifiers) || !Modifier.isStatic(modifiers)) { err = localStrings.getLocalString( "utility.main.notpublicorstatic", "The main method is either not public or not static"); _logger.log(Level.SEVERE, "enterprise_util.excep_in_utility_main.notpublicorstatic"); throw new ClassNotFoundException(err); } // check return type and exceptions if (!mainMethod.getReturnType().equals(Void.TYPE)) { err = localStrings.getLocalString( "utility.main.notvoid", "The main method's return type is not void "); _logger.log(Level.SEVERE, "enterprise_util.excep_in_utility_main.notvoid"); throw new ClassNotFoundException(err); } // build args to the main and call it Object params[] = new Object[1]; params[0] = args; mainMethod.invoke(null, params); }
public boolean handleCommand(String line, PrintWriter out) { String[] split = line.split("[\t ]"); String commandName = split[0]; try { Method[] methods = exportedInterface.getMethods(); for (Method method : methods) { if (method.getName().equals(commandName) && method.getReturnType() == void.class) { return invokeMethod(line, out, method, split); } } throw new NoSuchMethodException(); } catch (NoSuchMethodException nsmex) { out.println(fullName + ": didn't understand request \"" + line + "\"."); } catch (Exception ex) { Log.warn(fullName + ": exception thrown while handling command \"" + line + "\".", ex); out.println(fullName + ": request denied \"" + line + "\" (" + ex.toString() + ")."); } finally { out.flush(); out.close(); } return false; }