суббота, 18 августа 2012 г.

Apache cxf 2.6.1 и Eclipse

В этой заметке мы опишем, как можно с помощью ant в Eclipse создавать веб сервис apache cxf.



Для знакомства с apache cxf нам понадобятся:
1) Eclipse 3.8
2) Apache cxf 2.6.1
3) Установить runtime cxf в Eclipse
4) Создать Dynamic web-project. В качестве сервера будем использовать tomcat 6.
5) В папку lib проекта добавить файлы:
aopalliance-1.0.jar             spring-context-3.0.7.RELEASE.jar
commons-logging-1.1.1.jar       spring-core-3.0.7.RELEASE.jar
cxf-2.6.1.jar                   spring-web-3.0.7.RELEASE.jar
FastInfoset-1.2.9.jar           wsdl4j-1.6.2.jar
neethi-3.0.2.jar                xmlschema-core-2.0.2.jar
spring-beans-3.0.7.RELEASE.jar
5) Создаём интерфейс и класс, реализующий наш интерфейс.
6) Вызываем мастер создания веб-сервиса и в качестве среды исполнения указываем cxf.
7) Деплоим сервис и радуемся жизни.

Для простоты изучения материала мы будем иметь дело с bottom up веб сервисом.
У этого мастера есть один недостаток - при любом изменении интерфейса придётся снова проходить мастер.
Хотелось бы это как-то автоматизировать. Если посмотреть дистрибутив cxf, то там есть пример build файла для ant, который вызывает wsdl2java с заданными параметрами. Трудно сказать насколько такой способ удобен для работы.

Попробуем задействовать ant для генерации артефактов веб-сервиса средствами Eclipse.
1) Для начала пройдём мастер создания веб-сервиса с использованием способа снизу-вверх.
Необходимо это для того, чтобы класс реализации и интерфейс дополнились аннотациями. В принципе это можно сделать самостоятельно.

2) Создадим ant файл для генерации wsdl: File - New - Other - Web Services - Ant files.
После этих действий появится каталог ant с двумя файлами: cxf_bujava.properties, cxf_bujava.xml.
Интерес представляет файл cxf_bujava.properties. Хм.. и тут IBM отметилась.

После изучения этого скелета, я привёл его к следующему виду:
!-- ScenarioType REQUIRED. Differentiates from "client" scenario.
ScenarioType=service
!-- InitialSelection REQUIRED. В этой части мы указываем класс реализации нашего сервиса
InitialSelection=/wstimeservice/src/ru/chernykh/BusinessTimeImpl.java

!--Utility property values - use these to list valid values for the following properties:
!-- Service.RuntimeId, Service.ServerId
ListRuntimes=true
ListServers=true
!-- Verbose will list informational messages as well as errors if set to true
Verbose=true

!--  Service.RuntimeId - ID of web service runtime
Service.RuntimeId=org.eclipse.jst.ws.cxf.cxfWebServiceRT
!-- Service.ServerId -  ID of target server
Service.ServerId=org.eclipse.jst.server.tomcat.60
!-- Service.TypeId - Java Bean is default for both Top Down and Bottom Up
!-- Service.TypeId=Java Bean

!-- ServiceProjectName - !--type:String - name of Service project - this property can be used to give the service project a different name than the project containing the initial selection.  type: String   
!--ServiceProjectName=serviceProjectName
!-- ServiceEarProjectName - !--type:String - name of Service EAR project - this property can be used to give the service EAR project a different name than the EAR project already associated with the service project.  type: String
!--ServiceEarProjectName=serviceEarProjectName

!-- Generate a client mainline using JAX-WS APIs
GenClient=false
!-- Говорим, что хотим сгенерировать сервер
GenServer=true
!-- Не будем создавать fault бины
GenWrapperFaultBeans=false
!-- Хотим, чтобы нам создали wsdl файл
GenWSDL=true
!-- Хотим, чтобы схемы были созданы отдельно и подгружались в wsdl через import, а не встраивались в wsdl
GenXSDImports=true
!--Указываем, что wsdl не будет использовать SOAP биндинги 1.2
UseSOAP12Binding=false
!--Укажем имя wsdl файла
WsdlFileName=businessTime.wsdl

3) Перед тем, как запускать build файл, необходимо выполнить настройку: Run - External Tools - External Tools Configurations.
В этом окне выбираем наш build файл, потом нажимаем на вкладку jre, выбираем Run in the same JRE as the workspace.

4) Выбираем build файл, запускаем цель.
Наши артефакты создались успешно.

В данном случае идёт привязка к Eclipse, поэтому мы немного теряем в переносимости нашего build файла. То есть из командной строки без привязки к Eclipse нам не удастся сгенирировать артефакты.

Комментариев нет:

Отправить комментарий