Camel - unmarshal()。serialization() - ClassNotFoundException

时间:2012-11-29 22:00:40

标签: java apache-camel osgi apache-karaf apache-servicemix

我正在尝试使用序列化方法解组一个bean,它不是当前的bundle,而是在commons组件包中。

当camel尝试解组我的bean时,我收到以下错误:

  

22:43:11,865 |错误| nModule-thread-1 | DefaultErrorHandler | 89 - org.apache.camel.camel-core - 2.8.0.fuse-06-11 |失败   交付时间:ID-ITEM-64684-49962-1354223882336-2-1。   交付尝试后用尽:1抓住:   java.lang.ClassNotFoundException:commons.InformationInput   java.lang.ClassNotFoundException:commons.InformationInput at   java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)[:1.6.0_33] at   java.security.AccessController.doPrivileged(Native Method)[:1.6.0_33]     在   java.net.URLClassLoader.findClass(URLClassLoader.java:190)[:1.6.0_33]     at java.lang.ClassLoader.loadClass(ClassLoader.java:306)[:1.6.0_33] http://stackoverflow.com/questions/6749334/osgi-bundle-access-spring-context-file-from-another-bundle     at java.lang.ClassLoader.loadClass(ClassLoader.java:247)[:1.6.0_33]     在   org.apache.felix.framework.ModuleImpl.doImplicitBootDelegation(ModuleImpl.java:1610)     在   org.apache.felix.framework.ModuleImpl.searchDynamicImports(ModuleImpl.java:1547)

我的包含bean的包正确启动,我在包定义的 Export-Package 中定义了 commons

有没有人设法做到这一点?

3 个答案:

答案 0 :(得分:1)

当序列化/反序列化类的bundle事先不知道必须导入哪些包时,有时会发生这种情况。

一种解决方法是使用DynamicImport-Package。例如:

DynamicImport-Package: *

这意味着捆绑包可以在任何包中导入类,但要注意成本(参见链接的文章)。

答案 1 :(得分:0)

这听起来类似于Hibernate发布的OSGi环境,因为类加载问题导致它失败。我会推荐一些类别的伙伴加载。在包含类的公共包的清单中添加此

Eclipse-BuddyPolicy:registered

然后在您的从属伙伴中确保将其作为依赖包添加到其清单中。

Eclipse-RegisterBuddy:com.nameofmycommonbundle

这应该可以解决您的问题。

以下是对hibernate reference

的引用

答案 2 :(得分:0)

我通过在camel-core bundle上启用dynamicimport找到了一个workaroud。 这可以在karaf控制台上完成:dev:dynamicimport <camel-core-bundle-id>