我正在尝试使用序列化方法解组一个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 包
有没有人设法做到这一点?
答案 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>