DOSGI 自定义供应商注册

DOSGI Custom Provider Registration

我正在尝试 运行 Apache Felix 中的 DOSGI。 我使用 CXF 3.2.0 包和 DOSGI 2.3.0

我可以成功注册服务,但无法为我的资源注册全局自定义提供程序。

我在接口中定义了一个资源:

@Path("")
public interface IToDoResource {

@GET
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
List<ToDo> getAllToDos();

@GET
@Path("{id}")
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
ToDo getToDoById(@PathParam("id") Long id);
...
}

然后实施于:

@Component(//
    name = "My.ToDoRestService", //
    immediate = true, //
    property = //
    { //
        "service.exported.configs=org.apache.cxf.rs", //
        "service.exported.interfaces=*", //
         "org.apache.cxf.rs.address=/todos", //
    } //
)
public class ToDoResource implements IToDoResource {
....
}

我尝试为我的 类 注册全局自定义提供程序。 我可以让它与资源上的 "service.exported.intents" 属性 和供应商上的 "IntentName" 一起工作提供商。 然而,对于这个资源,我想注册 4 个提供者:

或者,我也可以在资源上实现 IntentsProvider,它也有效。

但是以下不起作用,我在日志中没有为这种类型错误注册任何提供商:

@Component(//
    name = "My.ToDoJsonProvider", //
    immediate = true, //
    service = MessageBodyWriter.class, //
    property = {
        "service.exported.configs=org.apache.cxf.rs", //
        "org.apache.cxf.rs.provider=true", //
    } //
)
@Provider
@Produces(MediaType.APPLICATION_JSON)
public class ToDoJsonProvider implements MessageBodyWriter<ToDo> {

在 localhost:8080/cxf/todos/1 returns 空文档和日志上获取:

JAXRSUtils:1834] No message body writer has been found for class my.todo.repository.api.ToDo, ContentType: application/xml

要在全球范围内注册自定义提供商,我会错过什么?

似乎只有在资源属性中直接命名时才会考虑意图。 "service.exported.intents" 属性 必须列出资源可能需要的所有意图。

我找不到任何文档,但 RsProvider 和 IntentManagerImpl 的源代码 类 对我有帮助。

Rs提供者: https://github.com/apache/cxf-dosgi/blob/master/provider-rs/src/main/java/org/apache/cxf/dosgi/dsw/handlers/rest/RsProvider.java

IntentManagerImpl: https://github.com/apache/cxf-dosgi/blob/master/common/src/main/java/org/apache/cxf/dosgi/common/intent/impl/IntentManagerImpl.java