2016-03-14 10 views
0

Я работаю с CXF WebClient, я пытался сделать службу WebClient и сделать вызов с ним, я установить тип JSON в заголовке, но я получаю джокер в заголовкеBad заголовок в CXF

I сделал это для сделать WebClient

client = WebClient.create(endPoint,Collections.singletonList(new JacksonJsonProvider())). 
      accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON); 

    ClientConfiguration config = WebClient.getConfig(client); 
    config.getInInterceptors().add(new LoggingInInterceptor()); 
    config.getOutInterceptors().add(new LoggingOutInterceptor()); 

И я должен это сделать получить называют

Response reponse=clientThreadSafe().path("tokens/{id}",virtualToken.getId()).get(); 

return genericReponse(Token.class,Status.OK,reponse); 

с clientThreadSafe

private WebClient clientThreadSafe() throws CertEuropeException{ 
    //thread safe, see http://cxf.apache.org/docs/jax-rs-client-api.html#JAX-RSClientAPI-ThreadSafety 
    return WebClient.fromClient(client); 
} 

И genericReponse

private <T> T genericReponse(Class<T> classReponse, Status status, Response reponse) throws Exception{ 

    if(reponse.getStatusInfo()!=status){ 
     throw new Exception("somthing bad here"); 
    } 
    return reponse.readEntity(classReponse); 

} 

Но я получаю подстановочные в вызове

INFOS: Setting the server's publish address to be 
http://localhost:9090 mars 14, 2016 1:52:31 PM 
org.apache.cxf.interceptor.LoggingOutInterceptor INFOS: Outbound 
Message 
--------------------------- ID: 1 Address: http://localhost:9090/api/v1/tokens/1 Http-Method: GET 
Content-Type: Headers: {Accept=[*/*]} 

И я получаю одно исключение

GRAVE: No message body reader has been found for class com.client.Token, ContentType: application/octet-stream 
mars 14, 2016 1:52:31 PM 
org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse 
AVERTISSEMENT: javax.ws.rs.WebApplicationException: HTTP 415 Unsupported Media Type 

Я не знаю, почему WebClient не принимая заголовок MediaType.APPLICATION_JSON, возможно, я не использую правильную функцию для установки заголовков.

Если я попробую с другим клиентом для отдыха, например, почтовым человеком, и я установил правильный заголовок, все, кажется, работают нормально.

ответ

0

После большого испытания я обнаружил, что «Свободный интерфейс» на самом деле не работает так, как должно, кажется, что порядок важен, и если вы установите вначале Accept и тип WebClient, это можно сбросить.

Таким образом, для каждого вызова я должен сделал accept(MediaType.APPLICATION_JSON).type(MediaType.APPLICATION_JSON) по методу пути, как:

path("tokens/{id}",token.getId()) 
.accept(MediaType.APPLICATION_JSON) 
.type(MediaType.APPLICATION_JSON) 
.invoke("GET", "") 

Если я изменить заказ, принять и тип не будет принимать в кол