Интерфейс клиентского ресурса рестлета jse2 не виден в загрузчике классов - PullRequest
0 голосов
/ 29 ноября 2011

Я следовал этому руководству для моего сервера Restlet в Google App Engine: http://wiki.restlet.org/docs_2.0/13-restlet/21-restlet/318-restlet/303-restlet.html Он отлично работает с клиентом GWT.

Теперь я пытаюсь собрать настольный клиент jse2 с OSGi и Restlet.

Код клиента Restlet в комплектации OSGi совпадает с предоставленным Tutorail.

Когда я запускаю фреймворк OSGi Felix, я также запускаю пакет org.restlet.jar, который экспортирует пакеты фреймворка рестлетов, и я запускаю пакет с этим кодом, указанным в общей сумме:

ClientResource cr = new ClientResource("localhost:8888/contacts/123");
// Get the Contact object
ContactResource resource = cr.wrap(ContactResource.class);
Contact contact = resource.retrieve();

Интерфейс ContactResoure находится в том же пакете, что и активатор пакета, но я все еще получаю это странное сообщение: java.lang.IllegalArgumentException: интерфейс nl.nhl.minor.crm.desktop.restlet.ContactResource не виден из класс погрузчик

Эта проблема связана с OSGi или Restlet? И как я могу решить эту проблему?

Файлы манифеста для пакетов OSGi создаются плагином пакета maven.

1 Ответ

0 голосов
/ 08 декабря 2011

Правильный способ загрузки класса прост:

ClientResource cr = new ClientResource("http://127.0.0.1:8888/contacts/123");
Class<ContactResource> clazs = (Class<ContactResource>) cr.getClass().getClassLoader().loadClass("your.package.name.ClassName");
cr.wrap(clazs);

Это решение создает другую проблему: класс не импортируется пакетом org.restlet.

См. пакет импорта без редактирования файла манифеста в org.restlet для моего вопроса об этой проблеме.

...