Java Web Service

WSDL介绍

概述

       Web服务描述语言规范定义恩啦一个XML词汇表,该词汇表依照请求和响应消息,在服务请求和服务提供者之间定义了一种契约。

       WSDL描述包含必要细节,以便服务请求者能够使用特定服务,包含的细节如下:

u      请求消息的格式

u      响应消息的格式

u      向何处发送消息

WSDL基本结构

Ø        WSDL文档可以分为两部分,顶部分由抽象定义组成;底部部分则有具体描述组成。

              抽象部分以独立于平台和语言的方式定义SOAP消息,并不包含任何随机器和语言而变化的元素

Ø        抽象定义

              Types:独立于机器和语言的类型定义

              Message:包括函数参数(输入与输出分开)或文档描述

              PortTypes:引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)

Ø        具体定义

              Bindings:PortTypes部分的每一操作在引绑定实现

              Services:确定每一绑定的端口地址

 

Ø        抽象定义具体描述

              Types元素     -------------     数据类型定义的容器

                     将每个方法中输入传输列表中的所有参数组合为一种数据类型,将其输出参数也定义为一种类型。在Types中包含很多Element元素,每个Element元素包含上述的一种数据类型。

             Java Web Service_第1张图片

              Message元素 -------------     通信消息的数据结构的抽象类型定义

              <wsdl:message name=”sumResponse”>

                     <wsdl:part name=”parameters”element=”tns:sumResponse”>

                     </ wsdl:part>

              </wsdl: message>

              PortType元素:    -------------     可以描述一个Web Service可被执行的操作以及相关的消息

 Java Web Service_第2张图片

Ø               具体定义描述

n        Binding元素   ------       特定端口类型的具体协议和数据格式规范的绑定


n        Service元素   -------相关服务访问点的集合


       Service元素包含一组端口的集合,每个port被绑定指定一个单独的地址来定义一个独立的端点

       每个Service元素可以包含一个或多个port元素,每个port元素不能指定多个地址,且不能指定地址意外的其它信息,这些port不能相互同姓

SOAP介绍

      SOAP概述

Ø        SOAP(Simple Object Protocol,简单对象访问协议)

                     SOAP是一个基于XML的,用于在分布式环境下交换信息的轻量级协议。

Ø        SOAP包含的四个部分

                     SOAP封装

                     SOAP编码规则

                     SOAPRPC表示

                     SOAP绑定

Ø        SOAP规范

              SOAP1.2规范于2003年6月24日被发布为W3C推荐标准

              SOAP的优点

                     厂商无关

                     平台独立

                     操作系统独立

                     编程语言独立

Ø        什么是SOAP?

              SOAP是指简单对象访问协议

              SOAP是一种通信协议

              SOAP用于应用程序之间的通信

              SOAP是一种用于发送消息的格式

              SOAP被设计用来通过因特网进行通信

              SOAP独立于平台

              SOAP独立于语言

              SOAP基于XML

              SOAP很简单并可以扩展

              SOAP允许您绕过防火墙

              SOAP将被作为W3C标准来发展

Web Service发展历程

       WebService发展不同阶段的产物


              

JAX-WS与JAX-RPC之间的关系

Ø        Sun最早开始的WebService的实现是JAX-RPC1.1,这个实现是基于Java的RPC,并不完全支持Schema规范

Ø        JAX-WS2.0是Sun新的WebService协议栈,是一个完全基于标准的实现

JAX-WS与JAX-RPC的相同点

       都支持SOAP1.1

       都支持WSDL1.1

JAX-WS与JAX-RPC的区别

Ø        JAX-WS支持SOAP1.2

Ø        XML/HTTP,JAX-RPC忽略了对HTTP的绑定,但JAX-WS添加了支持

Ø        java新功能

              JAX-RPC映射到Java1.4版本,而JAX-WS映射到Java5.0版本,且依赖Java5.0中很多新功能,Java5.0添加了对JAX-WS的支持,但仍然支持JAX-RPC

Ø        数据映射模型

              JAX-RPC具有自己的映射模型,其模型涵盖了所有模式类型的90%;JAX-WS的数据映射模型是JAXB,JAXB保证所有XML模式的映射

Ø        接口映射模型

              JAX-WS使用新的Java5.0的功能,引入了异步功能

Ø        动态编程模型

JAX-WS介绍

      JAX-WS概述

Ø        JAX-WS的全称为Java API for XML-Based Web Services

Ø        JAX-WS2.0是面向Java5的开发WebServices的最新编程标准

Ø        到目前为止,JAX-WS已经发展到2.2版本

为什么使用JAX-WS

       JAX-WS是用于简化使用Java构造Web Services和WebServices客户机的工作的的技术,JAX-WS包含JAXB,JAX-WS创建XML的使用的就是JAXB

       提供完整的WebServices堆栈,减少开发和部署Web Services的任务

       提供用于将传统Java对象转换为WebServices的Annotation库,从而加速了WebService的开发工作

JAXB介绍

      JAXB概述

              JAXB(Java Architecture for XMLBinding)提供了一个快速而方便的方式绑定XML Schemas和Java,使Java程序员能够很方便的在Java应用程序中处理XML数据

              JAXB提供将XML树解组为Java内容树的方法,以及将Java内容树重新编组为XML文档的方法,如下图:

             Java Web Service_第3张图片

JAXB工作原理

编组(Marshalling)是把内存中的数据转化到存储媒介上的过程

Java Web Service_第4张图片

解组(Unmarshalling)是把数据从存储媒介转换到内存中的过程,正好与编组相反


往返(Round-tripping)用于描述从存储媒介到内存然后回到存储媒介的完整循环

JAX-WS如何发布WebService

       JAX-WS允许开发者可以选择RPC-Oriented或者message-oriented来实现自己的Web Service

在JAX-WS中,一个远程调用可以转换为一个基于XML的协议

在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码

开发WebService

      基于JAX-WS开发WebService服务端(myeclipse8.5)

Ø        创建Web Service Project,FrameWork选择JAX-WS

Ø        创建服务类(普通的Java类),提供需要发布的执行方法

Ø        创建WebService

Ø        部署Web Service

开发WebService客户端

创建WebService客户端

              创建Java项目

              创建Web ServiceC Client

              测试发布的Web Service

CXF介绍

Apache CXF

       Apache CXF是一个开源的WebService框架,CXF继承了Celtix和Xfire两大开源项目的精华,提供了对JAX-WS全面的支持

       CXF大大简化了Service的创建,同时它继承了Xfire传统,一样可以天然地和Spring进行无缝继承

Apache CXF功能特性

              支持WebService标准

              支持多种"Frontend"编程模型

              设计得更加直观与容易使用

              支持二进制和遗留协议

Apache CXF项目目标

              高性能、可扩展、简单且容易使用

              支持多种标准[SOAP\JAX-WS\WSDL]

              多种传输方式[http\servlet\jms等]、绑定【http\soap】和格式[xml\json]

              灵活部署[tomcat\jboss\weblogic]

Apache CXF开发并发布Web Service

n        添加Apache CXF常用jar包

n        新建项目导入常用jar包

n        创建并发布Web Service

u      创建Web service接口

l        创建HelloWorldService接口(代码略)

u      实现Web Service接口

l        创建HelloWorldService接口实现类HelloWorldServiceImpl(代码略)

u      创建服务器端

                     public static voidmain(String[] args){

                            HelloWorldServiceimpl = new HelloWorldServiceImpl();

                            ServerFactoryBeansvrFactory = new ServerFactoryBean();

                            svrFactory.setServiceClass(HelloWorldService.class);//指定类的实现服务

                            svrFactory.setAddress("http://localhost:8080/HelloWorld");//公布Service访问地址

                            svrFactory.setServiceBean(impl);//设置Bean的实现服务

                            svrFactory.create();//发布Web Service

                     }

Apache CXF开发客户端Web Service

创建客户端

       public class Client{

              public static void main(String[]args){

                     ClientProxyFactoryBeanfactory = new ClientProxyFactoryBean();

                     factory.setServiceClass(HelloWorlService.class);

                     factory.setAddress("http://localhost:8080/HelloWorld");

                     HelloWorldServiceservice = (HelloWorldService)factory.create();

                     System.out.println(service.sayHelloWorld("jiang"));

              }

       }

CXF传递对象

      复杂对象类型

u      JavaBean

u      List

CXF与Spring集成

CXF与Spring集成步骤

u      导入必要的jar包文件

u      创建服务接口

u      创建服务接口实现类

u      配置Spring配置文件,将Web Service服务类定义为Spring Bean,由Spring来管理

u      配置web.xml文件以集成Spring和CXF

CXF与Spring集成实现服务端

l        创建服务端接口

       @WebService//该注解使该接口成为Web Service接口

       publicinterface IProductService{

              /**保存产品信息*/

              publicvoid addProduct(Product product);

              /**根据id获得产品信息*/

              publicProduct getProductById(int id);

       }

l        创建服务接口实现类

       @WebService

       public classProductServiceImpl implements IProductService{

              public voidaddProduct(Product product){

                     System.out.println("---------服务端保存产品的信息--------");

                     //...

                     //...

              }

              public ProductgetProductById(int id){

                     Productproduct = new Product();

                     //product.setId(id);

                     //product.setxxx();

                     //...

                     returnproduct;

              }

       }

l        配置Spring配置文件

              在配置文件中添加CXF使用到的命名空间,如图蓝色文字所示

             Java Web Service_第5张图片

l        配置web.xml以集成Spring和CXF


l        发布Web Service

n        启动服务器

n        访问地址:

       http://localhost:8080/SpringCXF/productService?wsdl

CXF与Spring集成实现客户端

       配置Spring配置文件

              与配置服务器端一样,其次配置与服务器端相对CXF标签,即<jaxws :client />来定义客户端访问服务的声明。

             

       创建WebService客户端

      

总结

Java Web Service概述

       SOA介绍

       WSDL和SOAP

       Java Web Service的发展

Java Web Service标准

       JAX-WS

       JAXB

       服务器端与客户端的开发

Apache CXF框架

       Apache CXF框架介绍

       Apache CXF简单实现之HelloWorld

       Apache CXF应用之传递对象

       Apache CXF进阶之与Spring整合

 

你可能感兴趣的:(java,spring,Web,webservice,service,SOAP)