Author: cschneider Date: Fri Dec 9 15:25:46 2011 New Revision: 1212477 URL: http://svn.apache.org/viewvc?rev=1212477&view=rev Log: KARAF-1071 unwrap BufferedInputStream so the terminal recognizes the stream as system.in
Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1212477&r1=1212476&r2=1212477&view=diff ============================================================================== --- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java (original) +++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java Fri Dec 9 15:25:46 2011 @@ -77,10 +77,32 @@ public class ConsoleFactory { }); } } + + public static Object invokePrivateMethod(Object o, String methodName, Object[] params) throws Exception { + final Method methods[] = o.getClass().getDeclaredMethods(); + for (int i = 0; i < methods.length; ++i) { + if (methodName.equals(methods[i].getName())) { + methods[i].setAccessible(true); + return methods[i].invoke(o, params); + } + } + return null; + } + + private static <T> T unwrapBIS(T stream) { + try { + return (T) invokePrivateMethod(stream, "getInIfOpen", null); + } catch (Throwable t) { + return stream; + } + } protected void doStart(String user) throws Exception { final Terminal terminal = terminalFactory.getTerminal(); - InputStream in = unwrap(terminal.wrapInIfNeeded(System.in)); + // unwrap stream so it can be recognized by the terminal and wrapped to get + // special keys in windows + InputStream unwrappedIn = unwrapBIS(unwrap(System.in)); + InputStream in = terminal.wrapInIfNeeded(unwrappedIn); PrintStream out = unwrap(System.out); PrintStream err = unwrap(System.err); Runnable callback = new Runnable() {