Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中执行Karaf命令_Java_Osgi_Apache Karaf_Karaf_Blueprint Osgi - Fatal编程技术网

在java中执行Karaf命令

在java中执行Karaf命令,java,osgi,apache-karaf,karaf,blueprint-osgi,Java,Osgi,Apache Karaf,Karaf,Blueprint Osgi,下面的代码在控制台中执行karaf命令 public class DummyCallable { @Inject protected SessionFactory sessionFactory; private Session session; private ExecutorService executor; private ByteArrayOutputStream byteArrayOutputStream; private PrintSt

下面的代码在控制台中执行karaf命令

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;
    }
}

有人能帮我吗?

@Inject在卡拉夫不起作用。如果您使用karaf 4,您可以使用org.apache.karaf.shell.api.action.lifecycle包中的@Reference。

那么如何在karaf中新建SessionFactory对象呢?顺便说一句,这是在OpenDaylights中实现的。它可能不是命令,而是“调用命令的东西”,因此可能是一个声明性的
@组件
,带有DSYes中的
@引用
。。我认为你是对的。它应该是DS@引用
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)