среда, 7 декабря 2016 г.

Пример HelloTcSoap на Axis2

Давненько не писал ничего сюда.
Сегодня хочу рассмотреть использование веб-сервисов Teamcenter 10 с применением библиотеки Axis2. Часть первая - развёртывание и запуск.



Рассмотрим пример HelloTcSoap из архива soa_client. Пример из папки java\samples.
Папка HelloTcSoap представляет собой Eclipse проект. Проект будет нормально воспринят Eclipse 3.8, Java 1.7 и утилитой Ant 1.7. Внутри папки есть файл ReadMe.txt в котором описывается процесс сборки примера.

Этап 1.

Копируем проект в рабочую область. Импортируем проект из папки samples. Import -> Existing Projects into Workspace. Выбираем папку рабочей области samples. Галочкой уже выделен проект, который будет импортирован. Нажимаем Finish.
После импорта проекта, среда разработки начнёт ругаться.

Этап 2.

Для начала необходимо скачать Axis2.
В readme первым пунктом идёт добавление переменной окружения AXIS2_HOME, если вы будете собирать проект с помощью Ant'а из консоли, иначе необходимо добавить переменную в Eclipse. В проекте уже используется эта переменная. Заходим в меню Window -> Preference. Открываем раздел Java -> Build Path -> Classpath Variables и создаём переменную. Путь указываем до самой папки Axis, т.е. например C:/distr/axis2-1.7.x
Заходим в свойства проекта, открываем Java Build Path. Видно, что среда не может найти некоторые jar. Проект писался под более старую версию Axis2-1.6.2 и поэтому некоторые файлы придётся исправить. Например axiom-impl-1.2.13.jar, а в axis2-1.7.3 используется версия 1.2.19.
Исправляем всё. Дело это долгое и творческое, т.к. некоторых библиотек может вообще не быть. В итоге я просто добавил все jar'ы из папки lib Axis'а, а старые записи убрал. По сути переменная не понадобилась.

Как вариант, можно скачать версию 1.6.2 и не париться.

Этап 3.

Далее идёт генерирование заглушек (stub). Для этого используется файл build.xml в корне проекта.
У меня возникало несколько проблем на этом этапе. Во-первых Ант решил, что soa.home у меня в папке, где установлен TC10. Я не стал париться и просто скопировал папку wsdls туда. (Потом я ковырял файл build.xml и нашёл там объявление свойства soa.home. Задал верный путь до папки soa и всё стало работать правильно. Просто пример рассчитан на то, что его запускают из папки examples, а у нас это не так)

Во-вторых возникла ошибка парсинга wsdl. Решил это заменой значений атрибутов wsdlfilename у задач codegen. Имена файлов из папки заменил wsdl'ями реальных сервисов. Дело в том, что на сервере крутится TC10.1.5, а примеры для TC10.1.0 Возможно wsdl в папке различаются с реальными и поэтому возникла проблема.

При генерации используется папка wsdls в папке soa, как мы уже поняли. Могут возникнуть ошибки, если ант не найдёт необходимые файлы. Читайте сообщения анта в консоли. Ну а лучше реальные wsdl использовать я считаю.
После генерации появляются папки AxisGenCode/src и AxisGenCode, также появляется bat'ник для запуска. Батник нам не нужен, т.к. мы запускаем в Eclipse. Компилируем проект (или среда это делает за нас автоматически) и запускаем. Метод main находится в классе Hello. Как видим это опять практически тот же пример, что мы уже рассматривали на C#.
В аргументах запуска необходимо указать URI сервера или в самом коде, в классе Hello. Вернее, он указан, надо исправить просто.

В итоге.

Есть кстати ещё такая фишка, что при запуске примера (не только этого), сервер отклоняет соединение пока не будет запущен TC10. Там синхронизация какая-то происходит, может из-за этого? После запуска TC10, пример запускается нормально. Не знаю пока почему это происходит.

Надеюсь не очень запутанно написал. Удачи! Во второй части будем смотреть что там, да как.

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

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

Определение параметров CHS (Cylinder, Head, Sector) карт CF с помощью утилиты IDEINFO

 Столкнулся с проблемкой подключения карт CF к материнской плате LTC-SL REV-B и WD386SX-LPX. В БИОС этих плат нет автоопределения накопителе...