2013-04-07 4 views
2

Что является самым простым рецептом для создания базовой среды JAX-RS в контейнере OSGi 4, не прибегая к решениям супертяжелого веса, таким как Apache CXF.Базовый сервлет JAX-RS в среде OSGi 4.2

Хотя мне кажется, что регистрация сервлета-контейнера в Джерси с помощью HttpService должна сделать трюк, я не смог собрать коллекцию из нескольких пакетов, которые делают именно это.

Это суть моего расслоения активатора, где Resources класса реализует интерфейс Application, чтобы решить, какие классы имеет JAX-RS аннотации:

public void start(BundleContext context) throws Exception { 
    // Find the HttpService 
    ServiceReference ref = context.getServiceReference(HttpService.class.getName()); 
    HttpService service = (HttpService) context.getService(ref);  

    // Register a Jersey container 
    ServletContainer servlet = new ServletContainer(new Resources()); 
    service.registerServlet("/services", servlet, null, null); 
} 

ответ

3

Amdatu обеспечивает несколько пакетов сервисов RESTful с открытым исходным кодом, включая решение JAX-RS на основе Apache Wink.

См. http://amdatu.org/components/web.html для описания и tutorial video как создать базовый ресурс REST.

+1

ссылки сломаны – keesp

4

Вот пример приложение, которое работает с Джерси: https://source.everit.biz/svn/everit-osgi/trunk/samples/jaxrs/

После запуска установки mvn вы увидите загружаемый контейнер равноденствия с Jetty в target/eosgi-testing-dist/.... Вы можете найти, какие пакеты были использованы в папке lib.

Он использует это решение: https://source.everit.biz/svn/everit-osgi/trunk/remote/jersey/

Вот самый простой фрагмент кода, который делает трюк, основанный на решении выше (myObj является объектом, который содержит аннотации):

javax.ws.rs.core.Application application = new DefaultResourceConfig(); 
application.getSingletons().add(myObj); 

com.sun.jersey.spi.container.servlet.ServletContainer servletContainer = 
     new ServletContainer(application); 

Hashtable<String, String> initParams = new Hashtable<String, String>(); 
initParams.put("com.sun.jersey.api.json.POJOMappingFeature", "true"); 
httpService.registerServlet("/rest", servletContainer, initParams, null); 

Обратите внимание, что «initparams.put» полезен, если вы хотите иметь такие функции, как преобразование JSON.

обновление

пользователя/пасс для SVN ссылки: гость/гость

Проект дистанционного Джерси больше не поддерживается, но по-прежнему доступны на GitHub, тоже: https://github.com/everit-org/osgi-remote-jersey

+0

Связи svn мертвы. – Jmini

+0

@Jmini SVN работает, но запрашивает пользователя/пароль. Обновленное описание с пользовательским пропуском, а также пульт дистанционного управления доступен на github, поэтому добавлена ​​эта ссылка. Обратите внимание, что после ответа было много других решений, даже в OSGi Compendium есть спецификация, как предлагать услуги REST. –

1

Это должно сделать трюк: https://github.com/hstaudacher/osgi-jax-rs-connector

Используя издателя этого проекта вы сможете зарегистрировать свой OSGi службу в качестве веб-служб RESTful, просто зарегистрировав их в качестве OSGi услуг;)

0

Что помогло мне в следующей статье: Setting Up JAX-RS for Equinox OSGI

ключевые моменты:

  • конфигурация джерси ресурса (@Path, @Provider анодированных классов) необходимо зарегистрировать вручную с помощью org.glassfish.jersey.server.ResourceConfig.
  • Все другие параметры конфигурации (автоматическое обнаружение трикотажа с javax.ws.rs.Application или jersey.config.server.provider.packages) не удастся, потому что сервер Джерси не сможет сканировать их в Equinox.
  • Включите ServletContainer в комплект, в котором расположена конфигурация ресурсов.
Смежные вопросы