Верблюд - unmarshal (). Serialization () - ClassNotFoundException

Я пытаюсь демаршалировать с помощью метода сериализации bean-компонент, который не является текущим пакетом, а находится в пакете общих компонентов.

Я получаю следующую ошибку, когда camel пытается демаршалировать мой bean-компонент:

22: 43: 11,865 | ОШИБКА | nModule-thread-1 | DefaultErrorHandler | 89 - org.apache.camel.camel-core - 2.8.0.fuse-06-11 | Ошибка доставки для exchangeId: ID-ITEM-64684-49962-1354223882336-2-1. Исчерпаны после попытки доставки: 1 поймано: java.lang.ClassNotFoundException: commons.InformationInput java.lang.ClassNotFoundException: commons.InformationInput на java.net.URLClassLoader $ 1.run (URLClassLoader.java:202) [: 1.6.0_33] на java .security.AccessController.doPrivileged (собственный метод) [: 1.6.0_33] в java.net.URLClassLoader.findClass (URLClassLoader.java:190) [: 1.6.0_33] в 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 в 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)

Мой пакет, содержащий компонент, запущен правильно, и я определил пакет commons в Export-Package определения пакета

Кому-нибудь удалось такое?


person yodamad    schedule 29.11.2012    source источник
comment
Какой комплект в каком? :) Я импортирую пакеты из обычных в связке, где определен верблюжий маршрут из демаршаллинга.   -  person yodamad    schedule 30.11.2012
comment
Вам следует уточнить свой вопрос. Какие связки задействованы? Какой комплект что делает? Какие пакеты импортирует / экспортирует каждый пакет? Попробуйте построить минимальный пример, а затем добавьте эту информацию к своему вопросу.   -  person Björn Pollex    schedule 03.12.2012
comment
Подводя итог: пакет A определяет верблюжий маршрут, который содержит unmarshal (). Serialization (). Компонент для продолжения этой сериализации содержится в Bundle B (который содержит только POJO). Пакет A импортирует пакет POJO пакета B, а пакет B экспортирует один и тот же пакет.   -  person yodamad    schedule 03.12.2012


Ответы (3)


Это иногда происходит, когда пакет, который сериализует / десериализует классы, не знает заранее, какие пакеты должны быть импортированы.

Один из обходных путей - использовать DynamicImport-Package. Например:

DynamicImport-Package: *

Это означает, что пакет может импортировать классы в любой пакет, но будьте осторожны с затратами (см. Связанную статью).

person Dan Gravell    schedule 03.12.2012
comment
Я попытался добавить это в свой Bundle A (тот, в котором определен маршрут верблюда), но это не работает, поскольку проблема возникает в ядре верблюда. - person yodamad; 03.12.2012
comment
Он должен быть в пакете, в котором загружается класс. - person Dan Gravell; 19.12.2012

Это похоже на то, что Hibernate выдает ошибку в среде OSGi из-за проблем с загрузкой классов. Я бы порекомендовал что-нибудь классифицировать загрузку друзей по классу. в манифесте вашего пакета общих ресурсов, который содержит класс, добавьте это

Eclipse-BuddyPolicy:registered

Затем в вашем зависимом приятеле убедитесь, что вы добавили его как зависимый пакет, и это в его манифест.

Eclipse-RegisterBuddy:com.nameofmycommonbundle

Это должно решить вашу проблему.

Вот ссылка на ссылку на hibernate

person Duncan Krebs    schedule 01.12.2012
comment
Загрузка классов друзей - это функция Equinox, а не стандартная OSGi. (Все еще работает, просто хотел добавить эту информацию) - person Björn Pollex; 03.12.2012
comment
Я нашел обходной путь, но попробую это решение, как только у меня будет время - person yodamad; 03.12.2012

Я нахожу обходной путь, включив динамический импорт в пакете camel-core. Это можно сделать в консоли karaf: dev:dynamicimport <camel-core-bundle-id>

person yodamad    schedule 03.12.2012