// 
//     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.
//

= Web Service Tutorials
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:toc: left
:toc-title:
:description: Web Service Tutorials

- link:pet-catalog-screencast_ru.html[Pet Catalog (веб-службы RESTful) - IDE NetBeans 6.5]
- link:section_ru.html[]
- link:index_ru.html[Web Service Tutorials]
- link:intro-ws_ru.html[Введение в веб-службы]
- link:jax-ws_ru.html[Начало работы с веб-службами JAX-WS]
- link:rest_ru.html[Начало работы с веб-службами RESTful]
- link:flower_overview_ru.html[Передача двоичных данных с помощью приложения веб-службы, часть 1: обзор]
- link:flower_wsdl_schema_ru.html[Передача двоичных данных с помощью приложения веб-службы, часть 4: изменение файлов схемы и WSDL]
- link:flower_swing_ru.html[Передача двоичных данных с помощью приложения веб-службы, часть 5: создание клиента Swing]
- link:zillow_ru.html[ПО как услуга: руководство для Zillow]
- link:client_ru.html[Разработка клиентов веб-служб JAX-WS]
- link:wsit_ru.html[Расширенные возможности взаимодействия веб-служб]
- link:flower-code-ws_ru.html[Сквозная передача двоичных данных – вложение SOAP, часть 3: создание кода для веб-службы и ее тестирование]
- link:flower_ws_ru.html[Сквозная передача двоичных данных – вложение SOAP 2: создание веб-службы]



