2

I have REST endpoints published in OSGi container (Karaf) using javax.ws.rs annotations. HttpService is created by pax-web, and jax-rs services are published by com.eclipsesource.jaxrs/publisher.

In order to use this publisher, a quite monstrous feature was forged (copied somewhere from internet):

<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>

It generally works, but when I've tried to register event listener as described in wiki, the listener was never called. Another issue is the amount of libraries in the feature with 'magic numbers' as start levels, and potential problems by platform upgrade.

Do pax-web have a mechanism for publishing jax-rs endpoints, which I could use instead that forged feature? What do I need to activate, so that my endpoints would be published?

9ilsdx 9rvj 0lo
  • 7,955
  • 10
  • 38
  • 77
  • To the final question, not yet. It's work in Progress concerning registering jax-rs endpoints, as that part of the OSGi spec isn't fully specified yet. As one of the maintainers, I just can say, we love contributions :) – Achim Nierbeck Jun 09 '17 at 15:47

2 Answers2

0

CXF is an option for publishing REST endpoints. An example can be found at https://github.com/apache/cxf-dosgi/tree/master/samples/rest .

Mihael
  • 364
  • 2
  • 4
0

Looking through the PAX-Web source and documentation (see User-Guide and Developer-Guide) it does not appear to include support for JAX-RS (Java API for RESTful Web Services), or JSR 311.

There are, however, a number of other options that can be used to expose JAX-RS endpoints in OSGi, such as RESTeasy, Jersey, Apache CXF and others. Hopefully one of them can be used to improve the architecture you describe. Of the various options, the CXF implementation seems to be the best documented and is fairly easy to integrate with OSGi, at least based on my experience.

Woodchuck
  • 3,869
  • 2
  • 39
  • 70