2017-06-08 1 views
2

Ich habe REST-Endpunkte in OSGi-Container (Karaf) mit javax.ws.rs Annotationen veröffentlicht. HttpService wird von pax-web erstellt, und jax-rs-Dienste werden von com.eclipsesource.jaxrs/publisher veröffentlicht.Veröffentlichen von JAX-RS-Endpunkten mit Pax-Web

Um diesen Verleger zu verwenden, wird ein ganz ungeheuerliches Merkmal geschmiedet wurde (irgendwo aus dem Internet kopiert):

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

Es funktioniert im Allgemeinen, aber wenn ich zu register event listener as described in wiki versucht habe, wurde der Hörer nie genannt. Ein weiteres Problem ist die Anzahl der Bibliotheken im Feature mit "magischen Zahlen" als Startlevels und möglichen Problemen durch Plattform-Upgrades.

Haben Pax-Web einen Mechanismus für die Veröffentlichung von Jax-Rs-Endpunkten, die ich anstelle dieser gefälschten Funktion verwenden könnte? Was muss ich aktivieren, damit meine Endpoints veröffentlicht werden?

+0

Zur letzten Frage, noch nicht. Es ist Arbeit in Arbeit bezüglich der Registrierung von Jax-Rs-Endpunkten, da dieser Teil der OSGi-Spezifikation noch nicht vollständig spezifiziert ist. Als einer der Betreuer kann ich nur sagen, wir lieben Beiträge :) –

Antwort

0

Blick durch das PAX-Web source und documentation (siehe User-Guide und Developer-Guide) es keine Unterstützung für JAX-RS (für RESTful Web Services Java API) umfasst angezeigt wird, oder JSR 311.

Es gibt jedoch eine Reihe anderer options, die verwendet werden können, um JAX-RS-Endpunkte in OSGi zu belichten, z. B. RESTeasy, Jersey, Apache CXF und others. Hoffentlich kann einer von ihnen verwendet werden, um die von Ihnen beschriebene Architektur zu verbessern. Von den verschiedenen Optionen scheint die CXF implementation die am besten dokumentierte zu sein und ist relativ einfach mit OSGi zu integrieren, zumindest basierend auf meiner Erfahrung.