第1章 Java Web服务快速入门 1
1.1 什么是Web服务 1
1.2 第一个例子 4
1.2.1 服务端点接口(Service Endpoint Interface)和服务实现Bean 4
1.2.2 将Java程序发布为Web服务 6
1.2.3 通过浏览器测试Web服务 7
1.3 由Perl和Ruby语言实现的Web服务客户端 10
1.4 了解SOAP 11
1.5 Java语言实现Web服务请求 13
1.6 基于通信层的HTTP和SOAP消息跟踪 14
1.7 目前为止还有什么不清楚 16
1.8 Java SOAP编程API 18
1.9 带有复杂数据类型的Web服务 23
1.10 多线程端点服务发布程序 27
1.11 下一章 30
第2章 全面了解WSDL 31
2.1 WSDL在Web服务中的作用 31
2.1.1 从WSDL文档中生成客户端支持代码 32
2.1.2 使用@WebResult注解 35
2.2 WSDL文档结构 36
2.2.1 进一步了解WSDL绑定 38
2.2.2 Documen绑定样式服务的特点 39
2.2.3 利用WSDL文档的XML模式校验SOAP消息 42
2.2.4 包装的和非包装的Document绑定样式 43
2.3 Amazon E-Commerce Web服务 46
2.3.1 具有包装样式的电子商务客户端 47
2.3.2 具有非包装样式的电子商务服务客户端 52
2.3.3 RPC与Document绑定样式的权衡选择 55
2.3.4 异步的电子商务客户端 57
2.4 wsgen工具与JAX-B工件(Artifacts) 59
2.4.1 一个JAX-B例子 60
2.4.2 编码(Marshaling)与wsgen工件(Artifacts) 65
2.4.3 Java类型和XML模式类型(XML Schema Types)总结 67
2.4.4 利用wsgen工具产生WSDL文档 68
2.5 WSDL总结 69
2.5.1 代码优先(Code-First)和契约优先(Contract-First)的比较 69
2.5.2 利用wsimport工具采用代码优先方法的例子 70
2.5.3 代码优先(Code-First)、契约编译(Contract-Aware)方法 76
2.5.4 WSDL的不足 79
2.6 下一章 80
第3章 SOAP消息编程 81
3.1 SOAP是否真地不可见 81
3.1.1 SOAP 1.1与SOAP 1.2 81
3.1.2 SOAP消息架构 82
3.1.3 JWS Handler框架编程 84
3.1.4 RabbitCounter例子 85
3.1.5 向SOAP消息中注入报头块 85
3.1.6 配置客户层SOAP处理程序 91
3.1.7 在客户层通过编码方式添加一个Handler 92
3.1.8 在@WebMethod中产生一个错误 94
3.1.9 为客户端的健壮性添加拥有业务逻辑的Handler 95
3.1.10 添加一个服务端SOAP Handler 97
3.1.11 方法总结 101
3.2 在SOAP 1.2下实现RabbitCounter服务 102
3.3 MessageContext和传输头 104
3.4 Web服务与二进制数据传输 109
3.4.1 SOAP附件的3种选择 111
3.4.2 对二进制数据进行Base64编码 111
3.4.3 采用MTOM方式传输二进制数据 116
3.5 下一章 119
第4章 REST风格的Web服务 121
4.1 什么是Rest 121
4.2 从@WebService到@WebServiceProvider 125
4.3 RESTful版本的Teams服务 126
4.3.1 WebServiceProvider注解 126
4.3.2 语言无关与RESTful服务 132
4.3.3 RESTful服务特点总结 136
4.3.4 实现剩下的几个CRUD操作 136
4.3.5 处理XML的Java API 138
4.4 Provider和Dispatch 148
4.4.1 一个Provider/Dispatch例子 149
4.4.2 关于Dispatch接口的更多内容 153
4.4.3 一个基于SOAP服务的Dispatch客户端 157
4.5 利用HttpServlets实现RESTful Web服务 159
4.5.1 RabbitCounterServlet 160
4.5.2 MIME类型化的响应 165
4.6 基于现实世界中RESTful服务编写的Java客户端 167
4.6.1 Yahoo!新闻服务 167
4.6.2 Amazon E-Commerce服务:REST风格 170
4.6.3 RESTful Tumblr服务 173
4.7 基于Java的RESTful服务的WADL支持 177
4.8 JAX-RS:利用Jersey生成WADL 182
4.9 Restlet框架 186
4.10 下一章 191
第5章 Web服务安全 193
5.1 Web服务安全概述 193
5.2 线路级(Wire-Level)安全 194
5.2.1 HTTPS基本原理 195
5.2.2 对称和非对称加密/解密 196
5.2.3 HTTPS是如何提供这3个安全服务的 197
5.2.4 HttpsURLConnection类 200
5.3 为RabbitCounter服务添加安全支持 203
5.3.1 添加用户认证 211
5.3.2 HTTP基本认证 212
5.4 Web服务容器管理的安全 212
5.4.1 通过Tomcat部署一个@WebService 213
5.4.2 在Tomcat下为@WebService添加安全支持 215
5.4.3 应用程序管理(Application-Managed)的认证 217
5.4.4 容器管理的认证和授权 219
5.4.5 配置Tomcat容器管理的安全 220
5.4.6 使用密码摘要而非单纯的密码 223
5.4.7 安全的@WebServiceProvider 224
5.5 WS-Security 227
5.5.1 在Endpoint之下通过WS-Security对@WebService实施安全化 229
5.5.2 Prompter和Verifier 236
5.5.3 安全的SOAP信封 237
5.5.4 WS-Security例子总结 238
5.6 下一章 238
第6章 Java应用服务器中的JAX-WS 239
6.1 Java应用服务器概述 239
6.2 部署@WebServices和@WebServiceProviders 244
6.3 整合一个交互式网站和Web服务 250
6.4 将@WebService作为一个EJB实现 252
6.4.1 以一个无状态会话EJB方式实现 252
6.4.2 基于EJB实现的Web服务的端点URL 256
6.4.3 利用@Entity添加数据库支持 256
6.4.4 持久化配置文件 258
6.4.5 EJB部署描述符 260
6.4.6 Web服务中的Servlet和EJB实现 261
6.5 Java Web服务和Java消息服务 262
6.6 基于GlassFish WS-Security 265
6.6.1 利用数字证书进行互相“质询” 266
6.6.2 基于HTTPS协议的MCS 266
6.6.3 基于WSIT实现的MCS 269
6.6.4 引人瞩目的SOAP信封 276
6.7 JAS部署所带来的好处 280
6.8 下一章 281
第7章 除了争论,还有什么 283
7.1 Web服务发展的简短历程 283
7.1.1 DCE/RPC中的服务契约 284
7.1.2 XML-RPC 285
7.1.3 标准化的SOAP 286
7.2 SOAP-Based Web服务对比Distributed Objects 287
7.3 SOAP和REST的融合 288
索引 291