Java 使用另一个OSGi包中的类

Java 使用另一个OSGi包中的类,java,export,osgi,bundle,Java,Export,Osgi,Bundle,我在OSGi捆绑包方面遇到了一个奇怪的问题 我有两个包裹,比如B1和B2。 B1使用以下方法导出包含类名Foo的包a.b.c: public JsonNode helloWorld() { System.out.println("Hello World!"); return null; } 然后B2导入B1包并尝试使用B1中的Foo类。我在编译方面没有问题,在Felix中启动包时也没有问题,似乎一切都很好 但是,当调用B2以使用helloWorld方法时,B2将停止工作,并且不

我在OSGi捆绑包方面遇到了一个奇怪的问题

我有两个包裹,比如B1和B2。 B1使用以下方法导出包含类名Foo的包a.b.c:

public JsonNode helloWorld() {
    System.out.println("Hello World!");
    return null;
}
然后B2导入B1包并尝试使用B1中的Foo类。我在编译方面没有问题,在Felix中启动包时也没有问题,似乎一切都很好

但是,当调用B2以使用helloWorld方法时,B2将停止工作,并且不会抛出任何错误! 在一些调试之后,如果我将JsonNode更改为字符串,则我认为方法helloWorld的返回类型是原因所在

为什么我的felix控制台没有出现错误?当返回类型为JsonNode时,为什么不能调用helloWorld方法

谢谢你的帮助

Edit1:更多信息,以下方法会产生完全相同的错误:

 public String helloWorld() {
     System.out.println("Hello World!");
     JsonNode test =  JsonNodeFactory.instance.objectNode();
     return test.asText();
 }
我在控制台中看到了Hello World!然后什么都没有,没有错误,没有跟踪,就像程序选择在这里停止并等待一样

编辑2: 我在建筑时有这样的警告,我不知道这是否重要:

[WARNING] Bundle fr.aaa.ccc.bbbb:1.0.0 : Export javax.json,  has 1,  private references [javax.json.stream], 
警告移除,仍然得到相同的动作

编辑3: 我设法在我的控制台中得到了一个错误,我想我已经关闭来找出问题所在

Caused by: java.lang.LinkageError: 
loader constraint violation: 
when resolving interface method "a.b.c.FooInterface.welcome(Ljava/lang/String;)Lorg/codehaus/jackson/JsonNode;"
the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) 
of the current class, d/e/f/lasthope/Activator, 
and the class loader (instance of org/apache/felix/framework/BundleWiringImpl$BundleClassLoaderJava5) for the method's defining class, a/b/c/aa/bb/FooInterface,
have different Class objects for the type org/codehaus/jackson/JsonNode used in the signature
    at d.e.f.Activator.start(Activator.java:37)

我猜您在BundleActivator中调用该方法。存在的一个常见问题是未记录启动方法等异常。因此,尝试在调用helloworld时使用try-catch并打印或记录异常


我认为JsonNode的问题在于bundle B2看不到类,或者B1看不到其他类。确保两个bundle都导入了包JsonNode。

请发布StackTrace。正如所说,根本没有StackTrace。我在调用helloWorld方法之前和之后放了一条日志消息。第一条日志消息出现在控制台中,但第二条从未出现。没有错误,没有stacktrace,nothing>我已经有一个try-catch块,它围绕着helloWorld调用,使用System.out、printStackTrace和登录catch块,以确保我能知道我是否到达那里。我的两个bundle有一个依赖项javax.json,我验证了,这两个bundle在Maven Dependencies中具有完全相同的库名称和版本。清单中是否有一个用于JsonNode包的导入包?确保没有嵌入Json类。如果您在某个地方为您的捆绑包冷提供代码,这将非常有帮助。