【发布时间】: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
为了使发行版正常工作,我在组装阶段缺少什么?
谢谢。
【问题讨论】: