2016-03-15 3 views
0

Код ниже выполняет karaf команды в консоли,Выполнение Karaf команд в Java

public class DummyCallable { 
    @Inject 
    protected SessionFactory sessionFactory; 
    private Session session; 
    private ExecutorService executor; 

    private ByteArrayOutputStream byteArrayOutputStream; 
    private PrintStream printStream; 
    private PrintStream errStream; 

    public DummyCallable() { 
     byteArrayOutputStream = new ByteArrayOutputStream(); 
     printStream = new PrintStream(byteArrayOutputStream); 
     errStream = new PrintStream(byteArrayOutputStream); 

     executor = Executors.newCachedThreadPool(); 
     session = sessionFactory.create(System.in, printStream, errStream); 
    } 

    public String executeCommand(final String command) throws IOException { 
     byteArrayOutputStream.flush(); 
     byteArrayOutputStream.reset(); 

     String response; 
     FutureTask<String> commandFuture = new FutureTask<String> (new Callable<String>() { 
      public String call() { 
       try { 
        System.err.println(command); 
        session.execute(command); 
       } 
       catch (Exception e) { 
        e.printStackTrace(System.err); 
       } 

       printStream.flush(); 
       errStream.flush(); 
       return byteArrayOutputStream.toString(); 
      } 
     }); 

     try { 
      executor.submit(commandFuture); 
      response = commandFuture.get(10000L, TimeUnit.MILLISECONDS); 
     } 
     catch (Exception e) { 
      e.printStackTrace(System.err); 
      response = "SHELL COMMAND TIMED OUT: "; 
     } 

     System.err.println(response); 

     return response; 
    } 
} 

Я получаю "java.lang.NullPointerException" на линии

«сессия = sessionFactory.create (System.in, printStream, errStream);

Это информация деталь:

java.lang.NullPointerException 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:262) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at java.lang.Thread.run(Thread.java:745) 

Может кто-нибудь мне помочь?

+0

Итак, как я могу создать новый объект SessionFactory в karaf? btw, это реализуется в opendaylight – kevin5476

ответ

0

@Inject не работает в karaf. Если вы используете karaf 4, вы можете использовать @Reference из пакета org.apache.karaf.shell.api.action.lifecycle.

+0

Возможно, это не команда, а «что-то, что вызывает команду», поэтому, возможно, декларативный «@ Компонент» с «@ Reference» от DS –

+0

Да .. Я думаю, что вы правы. Это должно быть DS @Reference –