Я использую Apache Camel с CXF-RS, используя стандартную интеграцию, предоставляемую Camel (с использованием встроенной Jetty в исполняемом JAR), и она отлично работает.
Я хочу добавить поддержку OAuth (в качестве поставщика OAuth 1) на свой сервер REST, поскольку я уже использую CXF, я планирую использовать на нем интеграцию CXF JAX-RS OAuth: http://cxf.apache.org/docs/jax-rs-oauth.html
К сожалению, мне кажется, что мне нужно использовать сервлет для поддержки OAuth, и я изо всех сил пытаюсь добавить его перед вызовом моего процессора Camel. Поскольку мой маршрут определяется:
String CONTEXT = "?resourceClasses=" + MyServiceResource.class.getName();
final String cxfRSEndpointUri = "cxfrs://http://" + restServerUrl + ":" + restServerPort + CONTEXT;
from(cxfRSEndpointUri).process(restProcessor);
С точки зрения процессора (restProcessor) я не могу получить HttpServletRequest и HttpServletResponse из объекта Exchange, маршрут cxfrs не дает мне правильных тел:
final HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
final HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class);
Эти две команды возвращают значение null: cxfrs не похож на классический HTTP-маршрут Camel.
Есть ли способ настроить Camel Route, который бы добавил фильтр сервлетов (OAuthServletFilter, предоставленный CXF JAX-RS OAuth) перед использованием маршрута cxfrs?
Другой способ, который я вижу, - это проверить источники CXF JAX-RS OAuth: класс AbstractAuthFilter.java содержит реализацию проверок, необходимых для OAuth, но, если возможно, я предпочитаю не форкнуть часть этого класса, и для этого потребуется мне, чтобы проверить заголовки / значения HTTP из объекта обмена, предоставленного верблюдом, вручную. Я считаю, что должен быть лучший способ сделать это, но, возможно, я ошибаюсь.