2017-11-02 12 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"리소스에 속성을 사용하고 하나의 공급자에 대해 "IntentName" 공급자와 작업 할 수 있습니다.

  • 할일 XML 제공
  • 할일 JSON 공급자가
  • ArrayList를 XML 제공
  • ArrayList를 JSON 공급자 또는

나는 또한 구현할 수 있습니다 그러나이 자원에 대해 나는 4 개 공급자를 등록 할 IntentsProvider이 리소스에 있으며 작동합니다.

그러나 작동하지 않습니다 다음 나는 로그에 이러한 유형의 오류에 대한 등록 된 업체 얻을 :/1 반환 왜 그렇게 빈 문서 및 로그에 8080/CXF/: 로컬 호스트에

@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을

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