【问题标题】:Apache Karaf CXF jax-rs services using declarative services and karaf-assembly使用声明式服务和 karaf-assembly 的 Apache Karaf CXF jax-rs 服务
【发布时间】:2016-09-12 07:45:30
【问题描述】:

这是一个复杂的配置问题 我在这里有一个示例项目(开发分支)-> https://github.com/gadieichhorn/play.karaf.calculator/tree/develop

我打包了这些功能并使用了 karaf-assembly 工件,试图在我的项目已经部署的情况下创建一个自定义的 karaf 发行版。

到目前为止,我可以在本地 karaf 上部署功能/kar,但是当我创建自定义 karaf 程序集时,cxf REST 服务无法正常工作。

包装过程是自动化的: 构建 -> 功能/kar -> 组装 -> 集成测试(pax-exam)-> docker -> 验收。

2016-09-12 02:14:52,245 | WARN  | qtp18647439-126  | AbstractJAXBProvider             | 40 - org.apache.cxf.cxf-rt-frontend-jaxrs - 3.1.6 | javax.xml.bind.JAXBException

 - with linked exception:

[java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory not found by cxf-dosgi-ri-dsw-cxf [13]]

```

这是我的功能依赖项:

<feature>scr</feature>
<feature>aries-rsa-core</feature>
<feature>cxf-jaxrs</feature>
<feature>cxf-dosgi-provider-cxf</feature>

这是我的程序集:

        <configuration>
            <startupFeatures>
                <feature>eventadmin</feature>
            </startupFeatures>
            <bootFeatures>
                <feature>minimal</feature>
                <feature>shell</feature>
                <feature>shell-compat</feature>
                <feature>aries-blueprint</feature>

                <feature>scr</feature>
                <feature>aries-rsa-core</feature>
                <feature>cxf-jaxrs</feature>
                <feature>cxf-dosgi-provider-cxf</feature>

                <feature>calculator</feature>
            </bootFeatures>
        </configuration>

我的 REST 服务 API

@Component(
        name = "org.play.karaf.calculator.proxy.root",
        service = {ProxyRoot.class},
        property = {
            "service.exported.interfaces=*",
            "service.exported.configs=org.apache.cxf.rs",
            "org.apache.cxf.rs.httpservice.context=/calculator",
            "org.apache.cxf.rs.address=/proxy"
        }
)
public class ProxyRootProvider implements ProxyRoot { ...

我的模型仍然是 CXF 的默认提供者应该实现的 JAXB 实现。我需要添加提供商吗?

我试过了:

  • 卡拉夫 4.0.5 和 4.0.6

  • CXF 3.1.6 和 3.1.7

  • 白羊座 1.8.0。 & 1.9.0

  • DOSGi 1.8.0

为了使发行版正常工作,我在组装阶段缺少什么?

谢谢。

【问题讨论】:

    标签: rest jaxb cxf karaf


    【解决方案1】:

    您的功能有误:cxf-dosgi-provider-cxf 必须是 cxf-dosgi-provider-rs

    还可以比较 karaf_home/lib/endorsed 在您的自定义 karaf 程序集和 karaf 的默认分发中的库。 如果不一样,请将所有认可的库添加到您的配置中。

    例如:

        <libraries>
             <library>mvn:org.apache.servicemix.specs/org.apache.servicemix.specs.jaxp-api-1.4/2.8.0;type:=endorsed</library>
             <!-- ... other libraries -->
        </libraries>
    

    【讨论】:

      猜你喜欢
      • 2020-05-16
      • 2017-08-20
      • 2015-12-21
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2018-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多