使用gogo自定义命令时生成的异常

时间:2015-10-28 01:09:54

标签: osgi apache-felix gogo-shell

我使用bndtoools教程(http://bndtools.org/tutorial.html#write-a-command-component)中的信息创建了一个felix gogo自定义命令。

使用的代码如下:

@Component(properties = {
    CommandProcessor.COMMAND_SCOPE + ":String=texter",
    CommandProcessor.COMMAND_FUNCTION + ":String=text"
 },
 provide = Object.class
)
public class SocketUser
{
    private ActualUser aUser = new ActualUser();

    public SocketUser()
    {
       // TODO Auto-generated constructor stub
    }

    public void text(String aMessage)
   {
       aUser.textClients(aMessage);
    }

}

请注意,ActualUser类有一个名为textClient()的方法,目前只打印出一条消息。

我在构建中设置适当的东西并运行bnd文件,包括Bnd Annotations声明性服务。我还在运行时中拥有所有必需的Gogo包。

执行“帮助”会显示要显示的命令列表,其中包括以下内容:

felix:bundlelevel
felix:cd
felix:frameworklevel
felix:headers
felix:help
   .
   .
   .
scr:list
texter:text

其中“texter:text”是我添加的命令。

一切似乎都很好,除了当我尝试使用text命令时,我收到以下失败消息:

g! text hello!
gogo: InvocationTargetException: null
g! text
gogo: IllegalArgumentException: Cannot coerce text() to any of [(String)]
g! 

我想我理解第二条失败消息:命令需要一个字符串才能工作。不过,我不明白第一次失败。

有谁知道为什么这个命令不起作用?造成这些InvocationTargetExceptions的原因是什么?

更重要的是,我怎样才能让它们消失?

有人请指教......

1 个答案:

答案 0 :(得分:1)

我刚刚遇到此错误,因为org.apache.felix.gogo.runtime包的版本计算在我的Run Bundles中并不好。我遇到错误时是0.11.0。

enter image description here

我删除了该捆绑包并点击了"解决"再次。如图所示,它找到了另一个版本的0.14.0包,现在效果很好。