2017-12-13 15 views
0

내 JAX-RS 응용 프로그램에 사용자 정의 MessageBodyWriter<Object> 구현을 등록했습니다. 이 작성기는 문자열을 포함한 다양한 유형을 변환 할 수 있습니다.CXF에서 문자열 용 사용자 정의 MessageBodyWriter를 제공하는 방법

사용자 지정 변환기가 다른 형식에도 성공적으로 사용되지만 문자열의 경우 CXF는이를 고려하지 않습니다. isWriteable도 호출하지 않습니다. (이것은 CXF 2.x와는 다르므로 CXF 3.x에서 회귀 한 것으로 보입니다.)

CXF 3.1.11 코드를 실행하면 ProviderFactory.messageWriters 목록에 두 개의 항목 (StringTextProvider , JAXBElementTypedProvider) 내 사용자 지정 공급자. 첫 번째는 문자열을 변환하기를 원하며 목록의 첫 번째 것은 CXF가 선호합니다.

공급자를 문자열에 대해 기본 공급자로 변경하려면 어떻게해야합니까? 예 : StringTextProvider을 삭제할 수 있습니까? 아니면 내 공급자가 먼저 오도록 목록을 재정렬 할 수 있습니까?

@Provider 
@Produces(MediaType.APPLICATION_JSON) 
public class CustomeStringProvider extends StringTextProvider { 

    @Override 
    public void writeTo(String object, Class<?> type, Type genType, Annotation[] annotations, MediaType mediaType, 
      MultivaluedMap<String, Object> httpHeaders, OutputStream outputStream) throws IOException { 
     // ... 
    } 
} 

내가 컨버터을 주문하는 클래스 계층 구조를 확인 ProviderFactory.MessageBodyWriterComparator의 구현,보고에서이 방법에 대한 아이디어를 가지고 :

답변

1

그 클래스를 StringTextProvider를 서브 클래스 및 등록하여 작동하는지 알게되었습니다.