Необходимо реализовать веб-сервис c использование технологии JAX-WS. Сервис должен представлять собой серверное приложение, желательно использовать Tomcat или glassfish, в крайнем случае – любой другой бесплатный/opensource сервер приложений.
Веб-сервис должен обеспечить прием и обработку запроса по сбору информации о полученной стране, а именно – вернуть информацию по курсу валюты по отношению к российскому рублю на текущей день, используемой в стране и прогноз погоды в столице на текущий день.
В качестве входного параметра должно быть наименование страны (например, «США»), в результате должна вернуться информация, содержащаяся в ответах веб- сервисов погоды (Погода для города «Вашингтон») и курсов валют (RUR-USD в данном случае), а также должен быть уникальный идентификатор ответа.
Для запроса актуальных курсов валют рекомендуется использовать информацию с сайта центрального банка (http://www.cbr.ru/scripts/Root.asp?Prtid=DWS). Для запроса актуального прогноза погоды можно использовать веб-сервисы gismeteo (http://ws.gismeteo.ru).
Дополнительные требования к реализации:
Веб-сервис должен выполнять логирование в СУБД по следующим требованиям:
- Записывается в лог каждый запрос и сгенерированный ответ, запросы и ответы полученные от поставщиков веб-сервисов;
- Каждой записи должен присваиваться уникальный идентификатор – должен совпадать с идентификаторами, отправляемые в ответ;
- Должна быть отметка по времени для каждой записи;
- Должна быть возможность сгруппировать все запросы в рамках одной сессии (одна сессия – период от получения исходного запроса с информацией о стране до выдачи ответа на него, включая все промежуточные запросы и ответы в сторонние сервисы);
- Содержать статус обработки сообщения (Успешно/неуспешно);
- Содержать информацию об ошибке, если таковая имеется;
- В качестве СУБД желательно использовать MySQL или MS SQL, структура БД – свободная;
- При необходимости можно использовать дополнительные внутренние справочные сведения, если потребуется;
- Реализовать обработку ошибок (веб-сервис поставщика не ответил, приняты некорректные сведения, ответ не валиден);
- Форматы входных и выходных сообщений должны быть структурированы – содержать блок Courses – ответ от веб-сервиса курсов валют, Weather – ответ от веб-сервиса о погоде.
Запрос курсов валют с сайта Центрального Банка рекомендуется выполнять с использованием метода GetCursOnDate, сервис http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx. Из ответа забирать только блок «ValuteCursOnDate», актуальный для исходного запроса (в исходном примере – для «Доллара США»).
Запрос информации о погоде рекомендуется выполнять следующим образом:
- Выполнить регистрацию приложения с использованием метода RegisterHHUser, веб-сервис http://ws.gismeteo.ru/Registration/Register.asmx
- Полученный ключ использовать в дальнейшем при выполнении запросов (значение поля key)
- Выполнить запрос для кода региона с использованием метода FindByNameFull, веб-сервис http://ws.gismeteo.ru/Locations/Locations.asmx (параметры запроса: serial - значение, полученное на шаге 2, name – название города, count – количество результатов в ответе, language – значение «RU»);
- Взять первый блок подходящий по названию страны блок data/LocationInfoFull, получить значение поля id
- Выполнить запрос для получения информации о погоде с использованием метода GetHHForecast, веб-сервис http://ws.gismeteo.ru/Weather/Weather.asmx (параметры запроса: serial - значение, полученное на шаге 2, location – значение поля id, полученное на шаге 4)
- Забрать значение блока data в ответ.
В качестве результата необходимо:
- примеры запросов на вход и на выход из реализованного веб-сервиса (файлы XML);
- скрипты для развертыванию БД на выбранной СУБД (создание структуры и наполнение, если требуется);
- описание по решению, если считаете нужным.
- Создать БД countryinfo
- Запустить на ней скрипт resources/init_db.sql
- Запуск сервера через IDE: класс ServicePublisher
- Запуск клиента через IDE: класс WsClient
Пример запроса:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:mzh="http://mzherdev.org/">
<soapenv:Header/>
<soapenv:Body>
<mzh:getByCountryName>
<country>США</country>
</mzh:getByCountryName>
</soapenv:Body>
</soapenv:Envelope>
Пример ответа:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<S:Body>
<ns2:getByCountryNameResponse xmlns:ns2="http://mzherdev.org/">
<date>2018-04-07</date>
<status>SUCCESS</status>
<countryInfo>
<forecast>
<dayTemperature>2</dayTemperature>
<humidity>36</humidity>
<nightTemperature>3.7148234844207764</nightTemperature>
<pressure>971.151123046875</pressure>
</forecast>
<rate>
<characterCode>USD</characterCode>
<course>57.8332</course>
<name>Доллар США</name>
<nom>1</nom>
</rate>
</countryInfo>
</ns2:getByCountryNameResponse>
</S:Body>
</S:Envelope>