воскресенье, 15 декабря 2013 г.

Работа с Web-сервисами в Oracle JDeveloper(Часть 2.Создание прокси класса и работа с сервисом в коде)

Когда в Orace ADF начинается разработка, то часто начинают использоваться  данные не только c БД, но и с других источников. И очень часто каким то другим источником является веб сервис. Для взаимодействия сервиса  c приложением используется  "Web Service proxy". 

В этой статье я хочу показать как создавать  для сервиса  "Web Service proxy" и  с его помощью вызвать необходимые методы в сервисе(Сервис будет использоваться из предыдущей статьи 
Работа с Web-сервисами в Oracle JDeveloper(Часть 1.Создание Web-сервиса   ).Если вам не хочется  читать прошлую статью используйте какой нибудь сервис с сайта  http://www.service-repository.com/

Приступим. Для создания прокси класса  нужно нажать CTRL+N и во вкладке "Web Services" выбрать Web Service proxy


Появится мастер создания прокси. Пропустив первый шаг, во втором впишите WSDL сервиса и уберите галочку "Copy WSDL Into Project"


Мастер состоит из 6 этапов(определение wsdl,определение в какие package создавать,демонстрация Port Endpoint,выбор типа методов, определение OWSM политик,определение handler классов) но в нашем случае, уже после второго этапа  можно нажать "Finish". После этого сгенерируются  все классы необходимые  для работы  с сервисом.


На выходе с WSDL файла  после вызова мастера обычно  генерируются схожие файлы.Вот основные из них:

Имя файла
Описание
Calculating.java
Интерфейс с методами сервиса  для их вызова.
CalculatingService.java
Имя файла сформированное  по имени сервиса :<service name="CalculatingService">
В нем находятся адреса сервиса и метод  getCalculatingPort для  инициализации сервиса 
CalculatigPortClient.java
.Имя файла сформированное  по <имя порта>Client.
Файл создан для проверки работы сервиса.
Автоматически генерируется метод main со строками  инициализирующих сервис:

 private static CalculatingService calculatingService;
........
    calculatingService = new CalculatingService();
    Calculating calculating = calculatingService.getCalculatingPort();
CalculatingServiceProxy
Контейнер сформированный  по правилу <имя сервиса >Proxy.
Контейнер в котором находятся все необходимы файлы для работы сервиса(кроме файлов с типам).

Если входящие и исходящие данные комплексные, то так же формируются  классы заканчивающиеся на  Request.java  и Response.java соответственно.

Что бы вызвать сервис зайдем в CalculatigPortClient.java,  к автоматически созданным строкам
                                     calculatingService = new CalculatingService();
                         Calculating calculating = calculatingService.getCalculatingPort();

Добавьте:
      Float result=calculating.calculate(4, 4, "+");
      System.out.println("Результат"+result);

Так как наш сервис выглядел просто(в зависимости от введенного типа операции сложить,вычесть,умножить или разделить два числа), то и вызов его достаточно прост, но он отображает основу работы с web service proxy:
 1.Создание  экземпляра прокси класса :
private static CalculatingService calculatingService;
....
CalculatingService calculatingService = new CalculatingService();
 2.Создание экземпляра интерфейса Calculating при помощи,  сформированного метода getCalculatingPort():
Calculating calculatingServicePort =calculatingService.getCalculatingPort();
    3.Вызов метода  calculate  из сервиса: 

Float result=calculating.calculate(4, 4, "+");

При запуске CalculatigPortClient.java выводится:

Listening for transport dt_socket at address: 60175
Debugger connected to local process.
Source breakpoint occurred at line 20 of CalculatingPortClient.java.
Результат: 8.0
Process exited.
Debugger disconnected from local process.


Исходники можно скачать по этим ссылкам:
Web-сервис с прошлой статьи: https://docs.google.com/file/d/0ByLMFtz8FbBvajJ1V3RncXNhRTA 
Приложение демонстрирующее вызов сервиса но немножку усовершенствованнный:  https://docs.google.com/file/d/0ByLMFtz8FbBvZllCVV9TN25CcXc