blob: d15b8ecdeacb452dbec0e08eeace3105d8bf3c14 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Передача двоичных данных с помощью приложения веб-службы, часть 4: изменение файлов схемы и WSDL
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Передача двоичных данных с помощью приложения веб-службы, часть 4: изменение файлов схемы и WSDL - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Передача двоичных данных с помощью приложения веб-службы, часть 4: изменение файлов схемы и WSDL
В этом уроке рассматривается добавление файла 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, как описано в link:http://jax-ws.dev.java.net/nonav/2.1.4/docs/mtom-swaref.html[+руководстве пользователя по JAX-WS+].
Готовый образец веб-службы можно загрузить из link:https://netbeans.org/projects/samples/downloads/download/Samples%252FWeb%2520Services%252FWeb%2520Service%2520Passing%2520Binary%2520Data%2520--%2520EE6%252FFlowerAlbumService.zip[+каталога примеров NetBeans+].
*Уроки, представленные в этом учебном курсе*
image::images/netbeans-stamp-80-74-73.png[title="Содержимое этой страницы применимо к IDE NetBeans 7.2, 7.3, 7.4 и 8.0"]
1. link:./flower_overview.html[+Обзор+]
2. link:./flower_ws.html[+Создание веб-службы+]
3. link:./flower-code-ws.html[+Написание кода веб-службы и ее тестирование+]
4. => Изменение файлов схемы и WSDL для передачи двоичных данных
5. link:./flower_swing.html[+ Создание клиента Swing+]
== Изменение файла схемы и файлов WSDL для передачи двоичных данных
Ниже приведена процедура создания измененных файлов WSDL схемы XML для веб-службы, созданной при изучении предыдущего учебного курса. Измененные файлы WSDL и схемы позволяют веб-службе и потребляющим ее клиентам обрабатывать данные изображений JPEG, передаваемых как двоичные данные.
*Изменение файлов WSDL и схемы:*
1. В окне 'Проекты' разверните узел веб-приложения FlowerService до перехода к узлу ``WEB-INF`` . Щелкните папку ``WEB-INF`` правой кнопкой мыши и выберите пункт "Создать", а затем "Папка". (При необходимости выберите "Создать" > "Прочее", а затем категорию "Прочее").
image::images/new-file-wiz-folder.png[]
[start=2]
. Нажмите кнопку "Далее". Откроется страница "Имя и местоположение". Присвойте папке имя ``wsdl`` .
image::images/wsdl-folder-name-location.png[]
[start=3]
. Нажмите кнопку "Завершить". В окне "Проекты" появится папка ``wsdl`` .
image::images/wsdl-folder.png[]
[start=4]
. Разверните узел 'Веб-службы' и щелкните правой кнопкой мыши узел FlowerService. Выберите команду "Создать и копировать файл WSDL"
[start=5]
. Откроется диалоговое окно "Создать и копировать файл WSDL" с деревом навигации. Перейдите к созданной папке ``wsdl`` (FlowerAlbumService > web > WEB-INF > wsdl) и щелкните ОК.
Теперь в узле ``wsdl`` отображаются файлы ``FlowerService.wsdl`` и ``FlowerService_schema1.xsd`` . Также выводится новый узел для созданных исходных файлов (jax-ws).
image::images/generated-wsdl-and-schema.png[]
[start=6]
. Необходимо явно указать на необходимость использования созданной версии файла WSDL для сервера приложений. В противном случае на сервере приложений будет создан собственный файл WSDL. Откройте файл ``FlowerService.java`` и найдите аннотацию ``@WebService`` . Добавьте в эту аннотацию параметр ``wsdlLocation="WEB-INF/wsdl/FlowerService.wsdl"`` следующим образом:
[source,java]
----
@WebService(serviceName = "FlowerService"*, wsdlLocation = "WEB-INF/wsdl/FlowerService.wsdl")*
----
[start=7]
. Измените файл схемы ``FlowerService_schema1.xsd`` таким образом, чтобы он определял ожидаемый тип возвращаемого элемента. Для определения возвращаемого элемента в файле схемы откройте этот файл и найдите составные типы ``getThumbnailResponse`` и ``getFlowerResponse`` :
[source,xml]
----
<xs:complexType name="getThumbnailsResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0" maxOccurs="unbounded"/></xs:sequence></xs:complexType>
----
[source,xml]
----
<xs:complexType name="getFlowerResponse"><xs:sequence><xs:element name="return" type="xs:base64Binary" minOccurs="0"/> </xs:sequence></xs:complexType>
----
[start=8]
. Добавьте следующие атрибуты в оба возвращаемых элемента ( ``<xs:element name="return".../>):`` .
[source,java]
----
xmime:expectedContentTypes="image/jpeg" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
----
Теперь те же строки должны выглядеть следующим образом:
[source,xml]
----
<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>
----
[source,xml]
----
<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>
----
[start=9]
. Теперь при повторном развертывании веб-службы в приложении тестирования и вызове одной из операций можно убедиться, что изображение возвращается корректно:
image::images/ws-tester-goodschema.png[]
После подтверждения в приложении тестирования, что изображения возвращаются корректно, можно создать клиент Swing для получения и отображения изображений.
== Что дальше?
link:./flower_swing.html[+Создание клиента Swing+]
link:/about/contact_form.html?to=3&subject=Feedback:%20Flower%20WSDL%20EE6[+Отправить отзыв по этому учебному курсу+]
Для отправки комментариев и предложений, получения поддержки и новостей о последних разработках, связанных с Java EE IDE NetBeans link:../../../community/lists/top.html[+присоединяйтесь к списку рассылки nbj2ee@netbeans.org+].