2017-11-02 7 views
0

Apache FelixでDOSGIを実行しようとしています。 私はCXF 3.2.0バンドルとDOSGI 2.3.0を使用しますDOSGIカスタムプロバイダ登録

私は正常にサービスを登録できますが、自分のリソースにグローバルカスタムプロバイダを登録することはできません。

@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"プロパティと、1プロバイダのプロバイダの"IntentName"と連携して動作させることができます。また私も実装することができ

  • のToDo XMLプロバイダ
  • のToDo JSONプロバイダ
  • のArrayList XMLプロバイダ
  • ArrayListのJSONプロバイダ

: しかし、このリソースのために、私は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> { 

は、ローカルホスト上のGET:8080/CXF /ドス/ 1戻り空のドキュメントおよびログに:

JAXRSUtils:1834]いいえ、メッセージ本文ライターがクラスmy.todo.repository.api.ToDo、ContentTypeをするために発見されていない:アプリケーション/ xmlの

私は彼は何を欠場か世界中のカスタムプロバイダを登録し直しますか?

答えて

0

意図は、リソースプロパティで直接命名された場合にのみ考慮されるようです。 "service.exported.intents"プロパティには、リソースに必要なすべてのインテントがリストされている必要があります。

私はドキュメントを見つけることができませんでしたが、RsProviderとIntentManagerImplクラスのソースコードが私にとって助けになりました。

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