В последнее время я играю со службами REST. Я создал свой сервис с помощью Apache CXF и развернул его в контейнере OSGI - это Apache Servicemix 4.
Мне удалось заставить его работать, но я столкнулся с несколькими оговорками:
первой попыткой развернуть сервер JaxRS в Servicemix было использование комплекта Activator. Несмотря на то, что класс Activator запускается, сервер не запускается. Я подозреваю, что моя конфигурация неверна. Это содержимое класса Activator:
public void start(BundleContext context) throws Exception {
System.out.println("TEST");
Dictionary<String, String> restProps = new Hashtable<String, String>();
restProps.put("service.exported.interfaces", "*");
restProps.put("service.exported.configs", "org.apache.cxf.rs");
restProps.put("service.exported.intents", "HTTP");
restProps.put("org.apache.cxf.rs.provider", MessageWriterProvider.class.getName());
restProps.put("org.apache.cxf.rs.address", "http://localhost:8080/");
context.registerService(MyService.class.getName(), new MyServiceImpl(), restProps);
}
Вторая проблема была с аннотациями REST. Мне нужно было добавить аннотации REST как на MyServiceImpl, так и на MyService (интерфейс).
Объяснение для этого - это было необходимо, потому что:
- MyServiceImpl - поскольку развернутый проект не будет выполнять все методы - только первый в данном классе
- MyService - потому что мне не удалось создать экземпляр клиента для этого WS
На самом деле я видел в тестах CXF, что не существует примера реализации интерфейса. Обычно аннотации ставятся на простые методы POJO, а класс Client объявляется программно, но это кажется утомительным и повторяющимся.
- Более того, несмотря на то, что служба развертываемая и работает правильно, мои тесты не пройдут, и я не могу придумать причину для этого. Возможно, кто-то мог бы быстро взглянуть.
Я поместил весь код на github: https://github.com/zygm0nt/cxf-playground на тот случай, если кому-то будет интересно разобраться в этих проблемах.
Пожалуйста, имейте в виду, я раньше не пользовался CXF, поэтому у этих тезисов могут быть некоторые простые проблемы, но поиск в Google не дал однозначных ответов на них.