Передача двоичных данных с помощью приложения веб-службы, часть 4: изменение файлов схемы и WSDL

This tutorial needs a review. You can open a JIRA issue, or edit it in GitHub following these contribution guidelines.

В этом уроке рассматривается добавление файла WSDL и файла схемы в веб-приложение. Также описывается изменение файла схемы для интерпретации массива байтов как изображений. Кроме того, в этом уроке представлены способы редактирования исходного кода веб-службы для правильного определения местоположения файлов схемы и WSDL. В процессе изучения учебного курса описаны различные средства среды IDE для работы с файлами WSDL и схемы.

Процедуру, рассматриваемую в этом разделе, можно применять к любым веб-службам JAX-WS для передачи данных типа MIME в качестве двоичных данных. В качестве основы для настройки схем WSDL и XML можно использовать веб-службу, передающую двоичные данные, которая была создана при изучении уроков 2 и 3. В настроенном файле схемы XML в возвращаемый элемент добавляется атрибут expectedContentTypes="mime_type" для двоичных данных. Этот атрибут сообщает клиенту о необходимости сопоставления двоичных данных с типом Java (сопоставление "MIME > Тип Java"), а не с массивом байтов. В этом учебном курсе выполняется сопоставление двоичных данных с java.awt.Image , однако двоичные данные можно сопоставлять с любыми типами Java, указанными в спецификации JAXB 2.0, как описано в руководстве пользователя по JAX-WS.

Готовый образец веб-службы можно загрузить из каталога примеров NetBeans.

Уроки, представленные в этом учебном курсе

netbeans stamp 80 74 73
Figure 1. Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0
  1. Обзор

  2. Создание веб-службы

  3. Написание кода веб-службы и ее тестирование

  4. ⇒ Изменение файлов схемы и WSDL для передачи двоичных данных

  5. + Создание клиента Swing+

Изменение файла схемы и файлов WSDL для передачи двоичных данных

Ниже приведена процедура создания измененных файлов WSDL схемы XML для веб-службы, созданной при изучении предыдущего учебного курса. Измененные файлы WSDL и схемы позволяют веб-службе и потребляющим ее клиентам обрабатывать данные изображений JPEG, передаваемых как двоичные данные.

Изменение файлов WSDL и схемы:

  1. В окне 'Проекты' разверните узел веб-приложения FlowerService до перехода к узлу WEB-INF . Щелкните папку WEB-INF правой кнопкой мыши и выберите пункт "Создать", а затем – "Папка". (При необходимости выберите "Создать" > "Прочее", а затем – категорию "Прочее").

new file wiz folder
  1. Нажмите кнопку "Далее". Откроется страница "Имя и местоположение". Присвойте папке имя wsdl .

wsdl folder name location
  1. Нажмите кнопку "Завершить". В окне "Проекты" появится папка wsdl .

wsdl folder
  1. Разверните узел 'Веб-службы' и щелкните правой кнопкой мыши узел FlowerService. Выберите команду "Создать и копировать файл WSDL"

  1. Откроется диалоговое окно "Создать и копировать файл WSDL" с деревом навигации. Перейдите к созданной папке wsdl (FlowerAlbumService > web > WEB-INF > wsdl) и щелкните ОК.

Теперь в узле wsdl отображаются файлы FlowerService.wsdl и FlowerService_schema1.xsd . Также выводится новый узел для созданных исходных файлов (jax-ws).

generated wsdl and schema
  1. Необходимо явно указать на необходимость использования созданной версии файла WSDL для сервера приложений. В противном случае на сервере приложений будет создан собственный файл WSDL. Откройте файл FlowerService.java и найдите аннотацию @WebService . Добавьте в эту аннотацию параметр wsdlLocation="WEB-INF/wsdl/FlowerService.wsdl" следующим образом:

@WebService(serviceName = "FlowerService"*, wsdlLocation = "WEB-INF/wsdl/FlowerService.wsdl")*
  1. Измените файл схемы FlowerService_schema1.xsd таким образом, чтобы он определял ожидаемый тип возвращаемого элемента. Для определения возвращаемого элемента в файле схемы откройте этот файл и найдите составные типы getThumbnailResponse и getFlowerResponse :

<xs:complexType name="getThumbnailsResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType>
<xs:complexType name="getFlowerResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0"/> </xs:sequence></xs:complexType>
  1. Добавьте следующие атрибуты в оба возвращаемых элемента ( <xs:element name="return"…​/>): .

xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"

Теперь те же строки должны выглядеть следующим образом:

<xs:complexType name="getThumbnailsResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"
                xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/></xs:sequence></xs:complexType>
<xs:complexType name="getFlowerResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0"
            xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"/> </xs:sequence></xs:complexType>
  1. Теперь при повторном развертывании веб-службы в приложении тестирования и вызове одной из операций можно убедиться, что изображение возвращается корректно:

ws tester goodschema

После подтверждения в приложении тестирования, что изображения возвращаются корректно, можно создать клиент Swing для получения и отображения изображений.

Что дальше?

Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с Java EE IDE NetBeans присоединяйтесь к списку рассылки nbj2ee@netbeans.org.