Вы находитесь на странице: 1из 7

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ

Кафедра ІУС

Дисципліна: «SOA і патерни проектування»

Практичне заняття № 1

«ИСПОЛЬЗОВАНИЕ SOAP WEB-СЕРВИСОВ»

Виконали: Прийняла:
ст. гр. ІТКН-17-6 Артем’єва О. Ю.
Проценко А. В. з оцінкою «____________»
Максименко І. С. «____»_______________20___р.
Орлов В. Ю.
Котаєв І. Е.

Харків 2021
Мета заняття: Реализовать базовые CRUD (Create, Read, Update, Delete)
операции с использованием SOAP web-сервисов согласно варианту задания.
Хід роботи
Вариант №4: Страны, имеет 3 атрибута: площадь (float), население (int),
название (String)
В ході роботи було створено наступні класи:

Клас Country:
package lab1.country;

import javax.xml.bind.annotation.XmlRootElement;
import java.util.Random;

@XmlRootElement //аннотация для JAXB, чтобы он начал преобразовывать объект в


XML и обратно
public class Country {
private float area;
private String name;
private int population;
private int id;

//конструктор по-умолчанию, инициализирует переменные значениями по-


умолчанию
public Country() {
this.name = "Test";
this.area = 0;
this.id = new Random().nextInt(); //генерация id при каждом создании
объекта
this.population = 0;
}

//параметризованный конструктор, позволяет задавать значения атрибутов


при создании объекта
public Country(String name, int population, int id, float area) {
this.area = area;
this.name = name;
this.population = population;
this.id = id;
}

/*набор getter/setter-ов для доступа к переменным объекта,


также они в большинстве случаев нужны для корректной работы JAXB и прочих
фреймворков*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPopulation() {
return this.population;
}
public void setPopulation(int population) {
this.population = population;
}
public float getArea() {
return this.area;
}
public void setArea(float area) {
this.area = area;
}

public int getId() {


return id;
}
public void setId(int id) {
this.id = id;
}

}
Клас CountryWebService:
package lab1.country;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC) //определение типа SOAP-
связывания
public interface CountryWebService { //интерфейс определяет методы, которые
будет представлять SOAP-вебсервис
@WebMethod //аннотация для того, чтобы Publisher понимал этот метод как
SOAP
//метод возвращает объект Country по его Id
Country getCountryById(int id);

@WebMethod
//метод удаляет объект Country по его Id
boolean removeCountryById(int id);

@WebMethod
//метод обновляет объект Country, заменяя его данные
boolean updateCountry(Country country);

@WebMethod
//возвращает массив всех объектов класса Country
Country[] getAllCountries();
}
Клас CountryWebServiceImpl:
package lab1.country;

import javax.jws.WebService;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/*
определение мапинга веб-сервиса, именно здесь и присутствует пакет, о котором
упоминалось раньше.
*/
@WebService(endpointInterface = "lab1.country.CountryWebService")
public class CountryWebserviceImpl implements CountryWebService {

//определение размера контейнера


private static final int CONTAINER_SIZE = 10;
//генератор случайных чисел
private static final Random RANDOM = new Random();

//создание пустой внутренней структуры данных


private static Map<Integer, Country> container = new HashMap<>();

//инициализация структуры данных заполненными объектами


static {
for (int i = 0; i < CONTAINER_SIZE; i++) {
int randomId = generateRandomNumber();
float area = generateRandomFloat();
container.put(randomId, new Country("Ukraine", 38000000,
randomId, area));
}
}
// метод для генерации случайных числе по указанному диапазону
private static int generateRandomNumber() {
return RANDOM.nextInt(CONTAINER_SIZE * CONTAINER_SIZE -
CONTAINER_SIZE + 1) + CONTAINER_SIZE;
}
private static float generateRandomFloat() {
return RANDOM.nextFloat();
}
// возвращает объект по его идентификатору
@Override
public Country getCountryById(int id) {
return container.get(id);
}
//возвращает список всех объектов
@Override
public Country[] getAllCountries() {
return container.values().toArray(new
Country[container.values().size()]);
}
//удаляет объект по его идентификатор, возвращает true, если объект был
удален и false - если нет
@Override
public boolean removeCountryById(int id) {
boolean CountryExists = container.containsKey(id);
container.remove(id);
return CountryExists || container.containsKey(id);
}
//обновление данных объекта в данном случае имя и возраст, id не
обновляется, т.к. служит ключом
@Override
public boolean updateCountry(Country country) {
Country countryToUpdate = container.get(country.getId());
if (countryToUpdate == null) {
return false;
} else {
countryToUpdate.setName(country.getName());
country.setId(country.getId());
return true;
}
}
}
Клас CountryPublisher:
package lab1.country;

import lab1.country.CountryWebserviceImpl;

import javax.xml.ws.Endpoint;
public class CountryPublisher {
//точка входа в JVM, выполнение любой Java программы начинается с main-
метода
public static void main(String[] args) {
/*запуск "вещания", Endpoint принимает 2 параметра - адрес сервиса и
его реализацию.
* localhost - адрес машины, localhost - будет доступен только на
локальном компьютере
* 8081 - номер порта, надо чтобы порт не был занят, занятые порты
можно проверить с помощью программы TCP View
* /ws/person - мапинг на SOAP сервис
*/
Endpoint.publish("http://localhost:8081/ws/country", new
CountryWebserviceImpl());
}
}

Рисунок 1 – Список усіх SOAP функцій


Рисунок 2 – Результат виконання функції відображення усіх країн

Рисунок 3 – Результат пошуку країни за ID

Рисунок 4 - Результат видалення країни за ID


Рисунок 5 – Результат оновлення країни за ID
Висновки:
Виконав практичну роботу ми ознайомилися з SOAP функціями та створили
свої функції для переглядання, видалення та оновлення інформації.

Вам также может понравиться