Публикация конечных точек JAX-RS с помощью pax-web

У меня есть конечные точки REST, опубликованные в контейнере OSGi (Karaf) с использованием аннотаций javax.ws.rs. HttpService создается pax-web, а сервисы jax-rs публикуются com.eclipsesource.jaxrs/publisher.

Для использования этого издателя была подделана довольно чудовищная фича (скопирована откуда-то из интернета):

<feature name="jersey-karaf-feature" description="Jersey karaf feature" version="2.2.0">
    <feature prerequisite="false" dependency="true">http</feature>
    <bundle start-level="36">mvn:org.glassfish.jersey.containers/jersey-container-servlet/2.22.2</bundle>
    <bundle start-level="36">mvn:org.glassfish.jersey.media/jersey-media-sse/2.22.2</bundle>
    <bundle start-level="36">mvn:org.glassfish.jersey.media/jersey-media-multipart/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.containers/jersey-container-servlet-core/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.core/jersey-common/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.bundles.repackaged/jersey-guava/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.core/jersey-server/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.core/jersey-client/2.22.2</bundle>
    <bundle start-level="36" dependency="true">mvn:org.glassfish.jersey.media/jersey-media-jaxb/2.22.2</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2/hk2-api/2.4.0-b34</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2/hk2-locator/2.4.0-b34</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2/hk2-utils/2.4.0-b34</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2/osgi-resource-locator/1.0.1</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2.external/javax.inject/2.4.0-b34</bundle>
    <bundle start-level="33" dependency="true">mvn:org.glassfish.hk2.external/aopalliance-repackaged/2.4.0-b34</bundle>
    <bundle dependency="true">mvn:javax.annotation/javax.annotation-api/1.2</bundle>
    <bundle dependency="true">mvn:javax.validation/validation-api/1.1.0.Final</bundle>
    <bundle dependency="true">mvn:javax.ws.rs/javax.ws.rs-api/2.0.1</bundle>
    <bundle dependency="true">mvn:org.javassist/javassist/3.18.1-GA</bundle>
    <bundle dependency="true">mvn:org.jvnet.mimepull/mimepull/1.9.6</bundle>
    <bundle start-level="80">mvn:com.eclipsesource.jaxrs/publisher/5.3.1</bundle>
    <bundle start-level="80">mvn:javax.ws.rs/jsr311-api/1.1.1</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.moxy/2.6.4</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.core/2.6.4</bundle>
    <bundle start-level="80">mvn:javax.validation/validation-api/1.1.0.Final</bundle>
    <bundle start-level="80">mvn:org.glassfish/javax.json/1.0.4</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.jpa/2.6.4</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/javax.persistence/2.1.1</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.asm/2.6.4</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.jpa.jpql/2.6.4</bundle>
    <bundle start-level="80">mvn:org.eclipse.persistence/org.eclipse.persistence.antlr/2.6.4</bundle>
</feature>

Обычно это работает, но когда я попытался зарегистрировать прослушиватель событий, как описано в вики слушатель никогда не вызывался. Другая проблема заключается в количестве библиотек в функции с «магическими числами» в качестве начальных уровней и потенциальных проблемах при обновлении платформы.

Есть ли у pax-web механизм публикации конечных точек jax-rs, который я мог бы использовать вместо этой фальшивой функции? Что мне нужно активировать, чтобы мои конечные точки были опубликованы?


person 9ilsdx 9rvj 0lo    schedule 08.06.2017    source источник
comment
На последний вопрос, пока нет. В настоящее время ведется работа по регистрации конечных точек jax-rs, поскольку эта часть спецификации OSGi еще не полностью определена. Как один из сопровождающих, я просто могу сказать, что мы любим вклад :)   -  person Achim Nierbeck    schedule 09.06.2017


Ответы (2)


CXF — это вариант публикации конечных точек REST. Пример можно найти по адресу https://github.com/apache/cxf-dosgi/tree/master/samples/rest .

person Mihael    schedule 09.06.2017

Просмотр PAX-Web источника и документация (см. Руководство пользователя и Руководство для разработчиков), похоже, он не включает поддержку JAX-RS (Java API для веб-служб RESTful) или JSR 311.

Однако существует ряд других параметров, которые можно использовать для предоставления конечных точек JAX-RS. в OSGi, таких как RESTeasy, Jersey, Apache CXF и других. Надеюсь, один из них можно будет использовать для улучшения архитектуры, которую вы описываете. Из различных вариантов реализация CXF представляется наиболее документированной и довольно легко интегрируется с OSGi, по крайней мере, исходя из моего опыта.

person J Woodchuck    schedule 11.06.2017