osgi - 使用 gogo 自定义命令时产生的异常

标签 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”是我添加的命令。

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

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

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

有谁知道为什么这个命令不起作用?是什么导致了这些 InvocationTargetExceptions?

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

有人请指教...

最佳答案

我刚才遇到这个错误是因为计算出的运行包中的 org.apache.felix.gogo.runtime 包的版本不好。我出错的时候是0.11.0。

enter image description here

我删除了 bundle 并再次单击“解决”。它找到了另一个版本的包 0.14.0,如图所示,现在运行良好。

关于osgi - 使用 gogo 自定义命令时产生的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381243/

相关文章:

java - 在 Java SE 上使用 felix 运行 Weld osgi 示例

eclipse - OSGi 子系统能否替代 Eclipse 功能?

liferay - 从 Gogo Shell,获取 com.liferay.portal.kernel 的版本

java - 如何在 Tomcat 上找到 "run"OSGi 片段?

servlets - CQ 中的 Sling Servlet - 资源不可修改

osgi - 适合 ERP 等应用程序的框架

Liferay 模块(OSGi 包)保留在 "Stopping"

java - 如何查看 Apache Felix Log 中未满足 bundle 要求的原因?

java - 吊索@Inject NullPointerError,当@Reference成功时

java - 混合 C/Java OSGi 平台