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

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

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

Кафедра ІУС

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

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

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

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

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

Клас Animal:
package lab1.animal;

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

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


XML и обратно
public class Animal {

private Boolean sex;


private String name;
private String type;
private long id;

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


умолчанию
public Animal() {
this.name = "test";
this.sex = true;
this.id = new Random().nextLong(); //генерация id при каждом создании
объекта
this.type = "test";
}

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


при создании объекта
public Animal(String name, String type, long id, Boolean sex) {
this.sex = sex;
this.name = name;
this.type = type;
this.id = id;
}

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


также они в большинстве случаев нужны для корректной работы JAXB и прочих
фреймворков*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return this.type;
}
public void setType(String type) {
this.type = type;
}
public Boolean getSex() {
return this.sex;
}
public void setSex(Boolean sex) {
this.sex = sex;
}

public long getId() {


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

}
Клас AnimalWebService:
package lab1.animal;

//нужные импорты для работы с SOAP-веб-сервисом


import lab2.person.Person;

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

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

@WebMethod
//метод удаляет объект Person по его Id
boolean removeAnimalById(long id);

@WebMethod
//метод обновляет объект Person, заменяя его данные
boolean updateAnimal(Animal animal);

@WebMethod
//возвращает массив всех объектов класса Person
Animal[] getAllAnimals();
}
Клас AnimalWebServiceImpl:
package lab1.animal;

import lab2.person.Person;
import lab2.person.PersonWebService;

import javax.jws.WebService;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/*
определение мапинга веб-сервиса, именно здесь и присутствует пакет, о котором
упоминалось раньше.
* lab2.person - имя пакета
* PersonWebService - имя интерфейса, интерфейс должен находится в этом пакете
* */
@WebService(endpointInterface = "lab1.animal.AnimalWebService")
//реализация интерфейса PersonWebService
public class AnimalWebserviceImpl implements AnimalWebService {

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


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

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


private static Map<Long, Animal> container = new HashMap<Long, Animal>();

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


static {
for (int i = 0; i < CONTAINER_SIZE; i++) {
long randomId = generateRandomNumber();
Boolean sex = generateRandomBoolean();
container.put(randomId, new Animal("Dog #" + i, "Type #" + i,
randomId, sex));
}
}
// метод для генерации случайных числе по указанному диапазону
private static int generateRandomNumber() {
return RANDOM.nextInt(CONTAINER_SIZE * CONTAINER_SIZE -
CONTAINER_SIZE + 1) + CONTAINER_SIZE;
}
private static Boolean generateRandomBoolean() {
return RANDOM.nextBoolean();
}
// возвращает объект по его идентификатору
@Override
public Animal getAnimalById(long id) {
return container.get(id);
}
//возвращает список всех объектов
@Override
public Animal[] getAllAnimals() {
return container.values().toArray(new
Animal[container.values().size()]);
}
//удаляет объект по его идентификатор, возвращает true, если объект был
удален и false - если нет
@Override
public boolean removeAnimalById(long id) {
boolean AnimalExists = container.containsKey(id);
container.remove(id);
return AnimalExists || container.containsKey(id);
}
//обновление данных объекта в данном случае имя и возраст, id не
обновляется, т.к. служит ключом
@Override
public boolean updateAnimal(Animal animal) {
Animal animalToUpdate = container.get(animal.getId());
if (animalToUpdate == null) {
return false;
} else {
animalToUpdate.setName(animal.getName());
animal.setId(animal.getId());
return true;
}
}
}
Клас AnimalPublisher:
package lab1.animal;

import lab1.animal.AnimalWebserviceImpl;

import javax.xml.ws.Endpoint;
public class AnimalPublisher {

//точка входа в JVM, выполнение любой Java программы начинается с main-


метода
public static void main(String[] args) {
/*запуск "вещания", Endpoint принимает 2 параметра - адрес сервиса и
его реализацию.
* localhost - адрес машины, localhost - будет доступен только на
локальном компьютере
* 9999 - номер порта, надо чтобы порт не был занят, занятые порты
можно проверить с помощью программы TCP View
* /ws/person - мапинг на SOAP сервис
*
* PersonWebserviceImpl - класс, реализующий интерфейс
PersonWebService
* */
Endpoint.publish("http://localhost:9999/ws/animal", new
AnimalWebserviceImpl());
}
}

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


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

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

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


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

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