// 
//     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:wsit_zh_CN.html[Advanced Web Service Interoperability（高级 Web 服务互操作性）]
- link:jax-ws_zh_CN.html[JAX-WS Web 服务入门指南]
- link:pet-catalog-screencast_zh_CN.html[REST 风格的 Web 服务 Pet 目录 - NetBeans IDE 6.5]
- link:rest_zh_CN.html[REST 风格的 Web 服务入门指南]
- link:zillow_zh_CN.html[SaaS（服务型软件）：Zillow 教程]
- link:section_zh_CN.html[]
- link:index_zh_CN.html[Web Service Tutorials]
- link:intro-ws_zh_CN.html[Web 服务简介]
- link:client_zh_CN.html[开发 JAX-WS Web 服务客户端]
- link:flower_ws_zh_CN.html[端到端二进制 SOAP 附件 2：创建 Web 服务]
- link:flower-code-ws_zh_CN.html[端到端二进制 SOAP 附件第 3 部分：对 Web 服务进行编码和测试]
- link:flower_overview_zh_CN.html[通过 Web 服务传递二进制数据，第 1 部分：概述]
- link:flower_wsdl_schema_zh_CN.html[通过 Web 服务传递二进制数据，第 4 部分：修改方案文件和 WSDL 文件]
- link:flower_swing_zh_CN.html[通过 Web 服务传递二进制数据，第 5 部分：创建 Swing 客户端]



