【问题标题】:Publishing JAX-RS endpoints with pax-web使用 pax-web 发布 JAX-RS 端点
【发布时间】:2017-11-09 23:28:01
【问题描述】:

我使用javax.ws.rs 注释在 OSGi 容器 (Karaf) 中发布了 REST 端点。 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>

它通常可以工作,但是当我尝试register event listener as described in wiki 时,从未调用过侦听器。另一个问题是功能中以“幻数”作为起始级别的库的数量,以及平台升级的潜在问题。

pax-web 是否有发布 jax-rs 端点的机制,我可以使用它来代替伪造的功能?我需要激活什么才能发布我的端点?

【问题讨论】:

  • 到最后一个问题,还没有。关于注册 jax-rs 端点的工作正在进行中,因为 OSGi 规范的那部分还没有完全指定。作为维护者之一,我只能说,我们喜欢贡献:)

标签: java jax-rs osgi karaf pax-web


【解决方案1】:

CXF 是发布 REST 端点的一个选项。可以在https://github.com/apache/cxf-dosgi/tree/master/samples/rest 找到一个示例。

【讨论】:

    【解决方案2】:

    查看 PAX-Web sourcedocumentation(请参阅 User-GuideDeveloper-Guide),它似乎不支持 JAX-RS(用于 RESTful Web 服务的 Java API)或 JSR 311 .

    但是,还有许多其他 options 可用于在 OSGi 中公开 JAX-RS 端点,例如 RESTeasy、Jersey、Apache CXF 和 others。希望其中之一可用于改进您描述的架构。在各种选项中,CXF implementation 似乎是记录最好的,并且很容易与 OSGi 集成,至少根据我的经验。

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 2016-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-30
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      相关资源
      最近更新 更多