2013-05-18 4 views
0

Я следовал этой tutorial video, который показывает, как запустить Джерси сервер (EDIT: Сервер, JAX-RS с помощью Apache Wink см принятого ответа) в OSGI. Это короткое видео, и процесс кажется очень ясным. Я не понимаю, как именно HelloWorldResource загружается в Джерси. HelloWorldResource зарегистрирован в контейнере OSGI в качестве сервиса с использованием Apache Felix DependencyActivatorBase (который отлично работает). Из того, что я собираю, Apache Felix Whiteboard должен каким-то волшебным образом отобразить это как ресурс Джерси, но когда я пойду запустить его, я получаю 404.Джерси ресурс не в решении OSGI

Я знаю, что сервис правильно отображается, поскольку он отображается в консоли, когда я выполните команду «services». Я знаю, что сервер работает, или я не получил бы 404 не найден. Я дважды проверил пакеты и верю, что все они установлены правильно.

Любые намеки приветствуются.

ответ

2

Прежде всего, Амдату не основан на Джерси. Джерси - одна из многих доступных реализаций JAX-RS. Amdatu основан на Apache Wink. Однако это не имеет особого значения для вас, поскольку вы все равно должны программировать стандарт.

Amdatu ищет сервисы, зарегистрированные как Object.class в реестре служб, и проверяет, зарегистрирован ли зарегистрированный сервис с аннотацией @Path. Если это так, служба зарегистрирована как ресурс JAX-RS. Таким образом, модель разработки очень похожа на использование JAX-RS в среде Java EE.

Вы можете установить пакет оболочки Apache Felix Dependency Manager для отладки служб, зарегистрированных с помощью DM. Введите в командной строке следующую команду: dm <bundleid>. Здесь перечислены все зарегистрированные службы этой связью. Вы должны увидеть сервис, зарегистрированный как java.lang.Object. Сделайте то же самое для идентификатора связки пакета org.amdatu.web.rest.wink. Вы должны увидеть что-то вроде этого для своей службы: javax.servlet.Servlet (init.applicationConfigLocation =/conf/application.properties, alias =/somepath, init.requestProcessorAttribute =/somepath).

Также проверьте, если вы ищете правильный URL. По умолчанию ресурсы RESTful в Amdatu регистрируются в корневом пути (например, «localhost: 8080/myresource»).

+0

Ключ для меня был подмигнул, и доски были загружены. Если Wink - это просто JAX-RS, то почему бы Amdatu не зарегистрировать ресурс, если я просто упал в jersey-server вместо Wink? – harschware

+2

Ярмарка вопрос. К сожалению, программный API для регистрации ресурсов из кода не стандартизирован в JAX-RS, поэтому требуется определенный код реализации. –

+0

У меня было 404 также с этой демонстрацией, но случилось потому, что два набора Jetty, где они были развернуты. (2.2.2 и 2.2.0) 2.2.2 находился в моем локальном режиме и вручную помещал его в блок «Требования выполнения». Другой (2.2.0) был разрешен с помощью кнопки «Решение» Bnd и загружен из концентратора BndTools. В соответствии с диалоговым окном разрешения пакет 2.2.0 был необходим для пакета доски. Может ли это быть ошибкой в ​​инструментах Bnd? Потому что я думаю, что оба набора Jetty, где они действительны. – Treur

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