WebService全面详解

本文全面解析WebService,涵盖SOAP协议(SOAP1.1与SOAP1.2的区别)、WSDL描述语言、UDDI注册服务,以及JAX-WS、CXF框架的使用。通过实际案例展示了如何发布和调用Web Service,包括JAX-WS服务发布、四种客户端调用方式,并探讨了CXF在SOAP和REST服务发布中的应用。
摘要由CSDN通过智能技术生成

1. 什么是WebService

   Web Service也称为web服务,它是一种跨编程语言和操作系统平台的远程调用技术。Web Service采用标准的SOAP协议传输(SOAP:Simple Object Access Protocol简单对象访问协议,soap属于w3c标准。并且soap协议是基于http的应用层协议传输xml数据)。Web Service采用WSDL作为描述语言,也就是Web Service 的使用说明书。并且W3C为Web Service制定了一套传输数据类型,使用xml进行描述,即XSD(XML Schema Datatypes),任何语言写的web Service 接口在发送数据的时候都要转换成WebService标准的XSD发送。

2. WebService的三要素

    2.1 SOAP

     SOAP也叫做简单对象访问协议,是一种简单的基于xml的协议,它使应用程序通过HTTP来交换数据,可以简单的理解为SOAP= http+xml。SOAP协议目前的主流版本为:SOAP1.1和SOAP1.2(soap1.2是被纳入w3c标准后的版本)。SOAP也不是WebService的专有协议,其它的应用程序也是用soap传输数据。例如:tr069也是使用soap协议来传输数据。

区分http请求和SOAP(SOAP=Http+XML)请求:


    2.1.1SOAP协议格式

    1.必须有Envelope元素,此元素将整个xml文档表示为一条SOAP消息。

    2.可选Header元素,包含头部信息。

    3.必须有Body元素,包含所有的调用和响应信息。

    4.可选的Fault元素,提供有关在处理此消息所发生的错误信息。

    2.1.2 SOAP1.1协议:

       Jaxws支持SOAP1.1服务端发布:

     请求信息:

POST /weather HTTP/1.1

Accept: text/xml, multipart/related

Content-Type: text/xml; charset=utf-8

SOAPAction: "http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: 127.0.0.1:54321

Connection: keep-alive

Content-Length: 214

 

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather>

</S:Body>

</S:Envelope>


      响应信息:

    

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: text/xml; charset=utf-8

Date: Thu, 26 Nov 2015 03:14:29 GMT

 

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">

<S:Body>

<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return></return></ns2:queryWeatherResponse>

</S:Body>

</S:Envelope>


     2.13 SOAP1.2

            Jaxws不支持支持直接SOAP1.2服务端发布,直接发布会报ServiceRtException异常。

      那么该怎么发布SOAP1.2的服务端呢?1.需要导入第三方jar包(jaxws-ri-2.2.8)2.在实现类中添加@BindingType(SOAP12HTTP_BINDING)注解。

请求信息:

     

POST /weather HTTP/1.1

Accept: application/soap+xml, multipart/related

Content-Type: application/soap+xml; charset=utf-8;

action="http://ws.jaxws.ws.itcast.cn/WeatherInterfaceImpl/queryWeatherRequest"

User-Agent: JAX-WS RI 2.2.4-b01

Host: 127.0.0.1:54321

Connection: keep-alive

Content-Length: 212

 

<?xml version="1.0" ?>

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">

<S:Body><ns2:queryWeather xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><arg0>北京</arg0></ns2:queryWeather>

</S:Body>

</S:Envelope>

响应信息:

HTTP/1.1 200 OK

Transfer-encoding: chunked

Content-type: application/soap+xml; charset=utf-8

Date: Thu, 26 Nov 2015 03:25:24 GMT

 

<?xml version='1.0' encoding='UTF-8'?>

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">

<S:Body>

<ns2:queryWeatherResponse xmlns:ns2="http://ws.jaxws.ws.itcast.cn/"><return></return></ns2:queryWeatherResponse>

</S:Body>

</S:Envelope>

      2.1.4 SOAP1.1和SOAP1.2区别

       相同点

       1.请求方式都是采用的POST方式

       2.协议内容相同:都有Envelope和Body标签。

       不同的:

       1.数据格式不同:content-type不同。

         SOAP1.1:text/xml;charset=utf-8

         SOAP1.2:application/soap+xml;charset=utf-8

       2.命名空间不同。

         SOAP1.1:http://schemas.xmlsoap.org/soap/envelope/

         SOAP1.2:http://www.w3.org/2003/05/soap-envelope


    2.2 WSDL

     WSDL是基于XML的用于描述Web Service 及其函数(方法)、参数和返回值。也就是说wsdl是对发布出来的服务中的方法和返回值以及参数的描述(可以成为是WebService的使用说明书)。

     WSDL文档结构:

     WSDL文档主要包括5个标签:

     1.<service> :服务视图,WebService的服务结点,它包括服务端点。

     2.<binding> :为每个服务端点定义消息格式和协议细节。

     3.<portType> :服务端点,描述WebService可执行的操作方法,以及相关的消息,通过binding指向portType。

     4.<message> :定义一个操作(方法)的数据参数(可有多个参数)

     5.<type> :定义WebService使用的全部数据类型。

     WSDL文档阅读方式:从下往上。

    2.3 UDDI
     UDDI是一种目录服务,通过它,企业可注册并搜集Web Service。企业将自己提供的Web Service注册在UDDI,也可以使用别的企业在UDDI注册Web Service服务,从而达到资源共享。UDDI旨在将全球的Web Service资源进行共享。

3. WebService开发规范

   3.1 JAX-WS

    JAX-WS(Java API for XML-Based Web Service):一个远程调用可以转换为基于XML协议(例如:SOAP协议),在使用JAX-WS过程中,开发者不需要使用任何代码来编写生成和处理SAOP。JAX-WS运行时会自动将这些API调用转换为SAOP协议的消息。

    在服务端,用户只需要通过Java语言定义远程调用所需要实现的接口(SEI:Service EndPoit Interface),并对其提供相关的实现,通过调用JAX-WS的服务来腹部接口就可以发布为Web Service 接口啦。

    在客户端,用户可以通过JAX-WS的API来创建一个代理来(用本地代理对象来替代远程的服务对象)实现远程服务端的调用。(在使用JAX-WS生成远程服务端的代理可以使用 wsimport(这个命令是jdk自带的)命令来自动生成,下面会对其进行具体讲解)

    从Java5开始就支持JAX-WS2.0版本,Java6以后的版本支持JAX-WS2.1版本,Java1.7支持JAX-WS2.2的版本。

   3.2 JAXM&SAAJ
    JAXM(Java API for XML Message):主要定义了包含接收信息和发送信息所需要的API,SAAJ(SOAP With Attachment API For Java)是与JAXM搭配使用的API,
  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值