我正在運行一個OSGi包的奇怪問題。使用另一個OSGi包的類
我有兩個包,讓我們說B1
和B2
。 B1
出口包含一個類名Foo
與方法包a.b.c
:
public JsonNode helloWorld() {
System.out.println("Hello World!");
return null;
}
然後B2
進口B1
包,並嘗試使用類Foo
從B1
。我在編譯時沒有問題,在Felix中啓動捆綁包時,一切似乎都沒問題。
但是當B2
是打電話使用helloWorld
的方法,B2
停止工作,不要拋出任何錯誤! 一些調試後,我的身影方法helloWorld
的返回類型是事業,如果我改變JsonNode
到String
一切都按預期方式工作。
爲什麼我沒有錯誤,我菲利克斯控制檯?當返回類型是JsonNode時,爲什麼我不能調用helloWorld
方法?
感謝您的幫助!
EDIT1:更多的信息,下面的方法不完全相同的漏洞:
public String helloWorld() {
System.out.println("Hello World!");
JsonNode test = JsonNodeFactory.instance.objectNode();
return test.asText();
}
我在控制檯中的Hello World見!然後沒有什麼,沒有錯誤,沒有追蹤,就像程序選擇停在這裏等待!
EDIT2:
我有建築,我不知道這是否是重要的意思時,這樣的警告:
[WARNING] Bundle fr.aaa.ccc.bbbb:1.0.0 : Export javax.json, has 1, private references [javax.json.stream],
警告刪除,仍然得到了同樣的comportement。
EDIT3: 我管理我的控制檯得到一個錯誤,我想我關閉找出什麼問題!
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)
請張貼堆棧跟蹤。 – TheLostMind 2015-01-21 10:53:42
就像說,根本沒有堆棧跟蹤。我在helloWorld方法的調用之前和之後放了一條日誌消息。第一個日誌消息出現在控制檯中,但第二個日誌消息從未出現。沒有錯誤,沒有堆棧跟蹤,什麼都沒有>< – 2015-01-21 11:01:04