2015-03-20 5 views
1

Я пытаюсь обновить одну из баз кода до CXF 3.0, а некоторые из классов устарели и пытаются обновить зависимости.Обновление с CXF 2.7 до CXF 3.0

@Override 
public Response handleResponse(Message m, OperationResourceInfo ori, 
     Response response) { 
    if (response.getStatus() == Response.Status.OK.getStatusCode()){ 
     if (response.getHeaderString("my_header") == null){ 
      Message inMessage = m.getExchange().getInMessage(); 
      String headerKey = getMyHeaderKey(inMessage); 
      if (headerKey != null){ 
       AbstractResponse entityResponse = (AbstractResponse) response.getEntity(); 
       response = generateResponse(entityResponse, inMessage, false); 
      } 
     } 
    } 
    return response; 
} 

private Response generateResponse(AbstractResponse ar, Message msg, boolean isConflict){ 
    ResponseBuilder responseBldr; 
    if (isConflict){ 
     responseBldr = Response.status(Status.CONFLICT); 
    } 
    else{ 
     responseBldr = Response.ok(ar); 
    } 
    responseBldr.header("header1", "true"); 
    HttpServletRequest request = (HttpServletRequest) msg.get(AbstractHTTPDestination.HTTP_REQUEST); 
    String retryId = request.getHeader("header2"); 
    if (retryId != null){ 
     responseBldr.header("header2", retryId); 
    } 
    return responseBldr.build(); 
} 

Я пытался использовать фильтры/Response ContainerRequest, но не смог найти, как я могу установить поведение

@Override 
public void filter(ContainerRequestContext containerRequestContext, ContainerResponseContext containerResponseContext) throws IOException { 
    Message m = JAXRSUtils.getCurrentMessage(); 
    containerResponseContext.getStatus(); 

    if (containerResponseContext.getStatus() == Response.Status.OK.getStatusCode()){ 
     if (containerResponseContext.getHeaderString("my_header") == null){ 
      Message inMessage = m.getExchange().getInMessage(); 
      String headerKey = getMyHeaderKey(inMessage); 
      if (headerKey != null){ 
       AbstractResponse entityResponse = (AbstractResponse) containerResponseContext.getEntity(); 
       response = generateResponse(entityResponse, inMessage, false); //how do I do this with CXF 3.0? 
      } 
     } 
    } 

} 
+0

Не могли бы вы объяснить свой вопрос –

+0

@KarthikPrasad, преобразовывая 'метод generateResponse' к CXF 3.0, как вы больше не имеют' 'RequestHandler' и ResponseHandler' – Reddy

ответ

1

Пожалуйста, обратитесь JAX-RS 2.0 Фильтр here, который говорит, что новые фильтры ContainerRequestFilter и ContainerResponseFilter имеют был введен. Ниже приведен пример, который вкратце выполняет все действия, которые вы пытались достичь.

public class KPFilter implements ContainerResponseFilter { 

    private Logger LOG = LoggerFactory.getLogger(KPFilter.class); 

    public void filter(ContainerRequestContext requestContext, 
      ContainerResponseContext responseContext) throws IOException { 

     if(responseContext.getStatus()== Status.OK.getStatusCode()){ 
      final String myHeader = requestContext.getHeaderString("myHeader"); 
      if(myHeader !=null && myHeader.equals("kp-header")){ 
       responseContext.getHeaders().add("resHeader", myHeader+"-res"); 
      }else{ 
       responseContext.setEntity("An erro occured"); 
       responseContext.setStatus(500); 
      } 
     }else{ 
      LOG.info("Status is not OK, its {}", responseContext.getStatus()); 
     } 

    } 
} 

И CXF конфигурационный файл

<jaxrs:providers> 
      <bean class="com.xxxxx.xxxxx.KPFilter" /> 
</jaxrs:providers> 
Смежные вопросы