2017-12-13 14 views
0

JAX-RSアプリケーションでカスタムMessageBodyWriter<Object>実装を登録しました。このライターは、文字列を含むさまざまなタイプを変換できます。CXFで文字列用のカスタムMessageBodyWriterを提供する方法

カスタムコンバーターは他のタイプでも正常に使用されますが、文字列の場合はCXFでは考慮されません。isWriteableも呼び出しません。 (これはCXF 2.xでは異なっていたので、CXF 3.xには回帰があるようです)

CXF 3.1.11コードを実行すると、ProviderFactory.messageWritersのリストに2つのエントリがあることがわかります。StringTextProviderJAXBElementTypedProvider)私のカスタムプロバイダの前に。最初のものは文字列を変換する必要があり、リストの最初のものはCXFが優先します。

私のプロバイダを文字列の優先プロバイダにするにはどうすればよいですか?例えば。 StringTextProviderを削除することはできますか?または、私のプロバイダが最初に来るようにリストを並べ替えることは可能ですか?

答えて

1

私は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の実装、見てから、このアプローチのためのアイデアを得ました。

関連する問題