Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Распределенные сервис-ориентированные системы..pdf
Скачиваний:
16
Добавлен:
05.02.2023
Размер:
9.2 Mб
Скачать

Рисунок 6.17 — Результат работы метода mPostLetter()

Чтобы новое сообщение появилось в общем списке, необходимо активировать кнопку «GET-список».

6.3.6 Клиент, реализующий методы DELETE и PUT

Реализация метода mDeleteLetter() во многом похожа на реализацию метода mGetLetter(), поскольку при формировании адреса запроса, кроме переменной address используется также переменная id. Кроме того, необходимо реализовать анализ трех кодов возврата:

а) если код возврата равен 200, то объект типа Response содержит удаленный объект и его необходимо извлечь, как описано ниже;

б) если код возврата равен 202, то действие по удалению объекта принято к исполнению, но еще не завершилось;

в) если код возврата равен 204, то адресуемый объект — удален, но в ответе его тело отсутствует;

При получении кода возврата 200, из объекта типа Response извлекается объект типа Letter, а затем — из объекта типа Letter извлекаются и устанавливаются переменные id и text.

Описанная реализация метода mDeleteLetter() показана на листинге 6.20.

288

Листинг 6.20 — Реализация метода mDeleteLetter() компоненты Lab9

// Удалить объект типа Letter по идентификатору id public String mDeleteLetter() {

//Проверяем авторизацию if(!isAuth()) {

resMsg = "Метод DELETE - нет авторизации!"; return "lab9";

}

//Формируем запрос к сервису

WebTarget target = ClientBuilder.newClient()

.target(this.address)

.path(new Integer(id).toString()); Invocation invocation =

target.request()

.buildDelete();

//Отправка запроса и получение ответа Response response =

invocation.invoke();

//Проверка кода возврата

int status = response.getStatus(); if(status == 202) {

resMsg = "Метод DELETE - код возврата: "

+new Integer(status).toString()

+" - Запрос с id="

+new Integer(id).toString()

+" - принят к исполнению...";

return "lab9";

}

if(status == 204) {

resMsg = "Метод DELETE - код возврата: "

+new Integer(status).toString()

+" - Отсутствует объект запроса с id="

+new Integer(id).toString();

return "lab9";

}

if(status != 200) {

resMsg = "Метод DELETE - код возврата: "

+ new Integer(status).toString() + "!"; return "lab9";

}

resMsg = "Метод DELETE - код возврата: 200 - Хорошо";

//Извлечение тела ответа в виде объекта типа Letter Letter body =

response.readEntity(Letter.class);

//Извлекаем id, text и возвращаемся к lab9.xhtml id = body.getId();

text = body.getText(); return "lab9";

}

289

Для удаления записи необходимо ввести ее идентификатор и активировать кнопку «DELETE-письмо». Результат удаления записи с id=106 показан на рисунке 6.18.

Рисунок 6.18 — Результат удаления записи методом mDeleteLetter()

Теперь перейдем к реализации метода mPutLetter().

Реализация метода mPutLetter() во многом похожа на реализацию метода mPostLetter(), поскольку в обоих случаях осуществляется передача объекта типа Letter производителю сервиса. Что касается кодов статуса объекта типа Response, то их — всего два:

1)код 200 — Хорошо, если в теле ответа возвращен измененный объект;

2)код 204 — Нет содержимого, если изменений не произошло.

При указанных условиях и ограичениях, описанная выше реализация метода mPutLetter() представлена на листинге 6.21.

290

Листинг 6.21 — Реализация метода mPutLetter() компоненты Lab9

// Модифицировать объект типа Letter по идентификатору id public String mPutLetter() {

//Проверяем авторизацию if(!isAuth()) {

resMsg = "Метод PUT - нет авторизации!"; return "lab9";

}

//Создаем новый объект типа Letter

Letter letter =

new Letter(new Date(), rsos.getUser(), text); letter.setId(id);

// Формируем запрос к сервису

WebTarget target = ClientBuilder.newClient()

.target(this.address)

.register(Letter.class); Invocation invocation =

target.request(MediaType.APPLICATION_XHTML_XML)

.buildPut(Entity.entity(letter, MediaType.APPLICATION_XML_TYPE));

//Отправка запроса и получение ответа Response response =

invocation.invoke();

//Проверка кода возврата

int status = response.getStatus(); if(status == 204) {

resMsg = "Метод PUT - код возврата: "

+new Integer(status).toString()

+" - Нет содержимого";

return "lab9";

}

if(status != 200) {

resMsg = "Метод PUT - код возврата: "

+ new Integer(status).toString() + "!"; return "lab9";

}

resMsg = "Метод PUT - код возврата: 200 - Хорошо";

//Извлечение тела ответа в виде объекта типа Letter Letter body =

response.readEntity(Letter.class);

//Извлекаем id, text и возвращаемся к lab9.xhtml id = body.getId();

text = body.getText(); return "lab9";

}

Результат модификации записи с id=109 показан на рисунке 6.19.

291

Рисунок 6.19 — Результат модификации записи методом mPutLetter()

Обратите внимание, что после обновления записи и, если оно прошло успешно, то обновленный вариант переписывается в форму, а список всех записей остается неизменным. Чтобы изменить список всех записей, необходимо активировать кнопку «PUT-письмо».

Данным примером, мы завершаем изучение учебного материала данной главы и дисциплины в целом. Надеюсь, что полученные в процессе обучения навыки и знания обеспечат дальнейший профессиональный рост студентов.

292