2012-05-03 2 views
2

У меня есть спокойный веб-сервис, основанный на cxf и верблюде. Я использую маршрутизации Camel для моей работы это что-то вроде этого ..Apache Camel и CXF: Как отправить код статуса HTTP из bean

Клиент -> Мой отдых класса обслуживания -> Camel Пользовательские процессоры -> некоторый метод Foo Бина Bar

боба FOOBAR выглядит как-то это ..

public class Bar { 

    public MyObject foo(String request, Exchange exchange){ 
    //do some procesing 

    return instance of MyObject; 
} 

Теперь проблема заключается в том, что всякий раз, когда я проверить это я получаю respone код 200 на стороне клиента. Теперь, если я хочу, чтобы этот код был чем-то иным, чем 200, мне нужно установить его в HttpServletResponse или другом объекте javax.ws.rs.core.Response, но как я могу получить доступ к этому объекту ответа.

Я пробовал следующее, но это не решило мою проблему.

  1. exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  2. exchange.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 202);

  3. exchange.setProperty(Exchange.HTTP_RESPONSE_CODE, 202);

  4. Response.status(202).build();

ответ

3

Вот обходной путь, я не знаю, если это единственный способ сделать это, но это работает для меня. Измените возвращаемый тип вашего метода Foo на Response (javax.ws.rs.core), а затем оберните свой объект («экземпляр myobject») в этом ответе, а также вы можете указать тип mime, если вы хотите .. следующее образец ..

public class Bar { 
    public Response foo(String request, Exchange exchange){ 
     //make instance of MyObject 
     MyObject myObj = new myObj(); 
     //do your processing and set the object in response code 
     Response response = Response.status(Status.ACCEPTED).entity(myObj).type(MediaType.APPLICATION_JSON).build(); 
     return response; 
    } 
} 
2

У вас усталый что-то вроде этого в йо ур маршрут

Response r = Response.status(202).entity("Created").build(); 
exchange.getOut().setBody(r); 

Поскольку вы хотите изменить ответ по умолчанию необходимо переопределить обмены сообщения о выходе

1

После установки HTTP_RESPONSE_CODE вам нужно сказать обмен произошла ошибка.

exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 202); 
exchange.getOut().setFault(true); 

 Смежные вопросы

  • Нет связанных вопросов^_^