2014-01-09 1 views
0

Bundle A зависит от комплекта XStream.Осевая циклическая ссылка, необходимая для десериализации объекта xstream?

Однако Bundle XStream также необходим доступ к классам в расслоении А, в противном случае я не могу сделать объект десериализации ала (BundleA.class)xstream.fromXml(xmlString)

Теперь то, что я сделал это Импорт-пакет в Bundle XStream моих BundleA пакетов и экспортируемых их в BundleA, но поскольку BundleA также использует XStream, Eclipse обнаруживает «циклическую ссылку». Кажется, все работает нормально, но я не вижу смысла в этой ошибке Eclipse? Как еще я могу решить это в osgi?

ответ

1

Как правило, вы должны попытаться получить четкое отношение пакета клиент-сервер между вашими пакетами. Поэтому, если возможно, вы должны избавиться от циклической ссылки. В вашей ситуации это возможно.

В отличие от того, что вы укажете, ваш комплект XStream может выполнять де-сериализацию объектов из другого пакета, если вы можете сказать функциональность, чтобы использовать другой загрузчик классов для загрузки классов, указанных в потоке. Так как кажется, вы используете XStream, вы можете использовать:

xstream.setClassLoader(bundleAClassLoader); 

где bundleAClassLoader является загрузчиком класса, который имеет доступ к классам домена (класс Загрузчик расслоения А). В этом случае Import-Package для комплекта XStream не требуется.

+0

это действительно работало, большое спасибо! Я предполагаю, что большинство фреймворков, которые используют отражение подобно этому, будут иметь какой-то метод .setClassLoader() – Blub

+0

Они должны. Если нет, игнорируйте их из-за плохого дизайна API. –

Смежные вопросы