⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17. webservice note.txt

📁 在达内培训java笔记
💻 TXT
📖 第 1 页 / 共 2 页
字号:
八、 SOAP Header
     1) header是envelope中可选的元素,假如出现的话,这个元素必须是SOAP envelope中第一个出现的子元素;
     2) 所有header元素的子元素称为header条款;
     3) header也能装载认证数据,数字签名,编码信息以及传输设置;
     4) header也能装载客户端或项目-指定控制以及协议的扩展;header的定义并不取决于body。
   1.可选的,用于扩展SOAP消息,例如:
     调用的上下文        目前的应用模式基本上停留在远程过程/对象的调用上,
                       基于多次协调调用或者遵循上下文的调用模式尚很少使用,这其实是受简单的SOAP消息的制约
     安全认证           保存用户标识及密码信息或者其他鉴定证书    
     事务控制           利用SOAP Header条目进行事务控制
     其他高级语义功能
   2.SOAP Header由一些Header条目组成
      <env:Header xmlns:env="http://www.w3.org/2001/06/soap-envelope" >
        <auth:authentication xmlns:auth="http://example.org/authentication"
         env:role="authentication:signin_service"  env:mustUnderstand="1"   relay=""  >
           <auth:userID>testuserid</auth:userID>
           <auth:password>[encodedPassword]</auth:password>
           <auth:redirection>http://example.com/service/</auth:redirection>
        </auth:authentication>
      </env:Header>
    3.role属性:(next|none|ultimateReceiver) 
         指定这个条目必须被哪种角色处理
    4.mustUnderstand:(true|false) 
         处理节点必须被处理,如果处理节点理解不了,必须返回一个SOAP Fault. (此时relay无意义) 
    5.relay:(true|false) 
         处理节点理解的条目,将会保留,并转发给下一个SOAP节点处理

九、 SOAP Body
    必须的,包含传递给最终的节点的实际信息
     1) SOAP body元素提供了一种机制用以交换信息;
     2) body元素是SOAP envelope元素的下一级元素;
     3) 假如存在header元素,body元素应该紧跟header元素之后。否则它应该紧跟envelope元素之后。
     4) 所有body元素的下一级子元素称为body的条目,这些条目各自独立;
     5) 在大多数简单的情况下,基本SOAP消息的body组成: 
        一个消息名称; 
        一个服务实例的引用;
     6) 在Apache SOAP中,一个服务实例为它的URN所标识。这个引用编码为名域空间的属性。
     7) 一至多个参数里装载着值和可选的类型引用; 
     8) 典型的body元素使用包括用相应的参数调用RPC、返回结果及错误报告; 
     9) 消息可以包括几乎任何XML结构,除了DTD及处理说明。

      <soap:Body xmlns:m="http://www.example.org/stock">
        <m:GetStockPrice>
            <m:StockName>IBM</m:StockName>
        </m:GetStockPrice>
      </soap:Body>


十、 SOAP Fault
    可选的,元素用于存留 SOAP 消息的错误和状态信息。必须出现在SOAP Body中
    <soap:Body xmlns:m="http://www.example.org/stock">
        <soap:Fault>
            <faultcode>MustUnderstand</faultcode>
            <faultstring>
                一个或多个必须的soap头未被理解
            </faultstring>
        </soap:Fault
    </soap:Body>

    <faultcode> 供识别故障的代码 
    <faultstring> 可供人阅读的有关故障的说明 
    <faultactor> 有关是谁引发故障的信息 
    <detail> 存留涉及 Body 元素的应用程序专用错误信息 

    faultcode的值:
      VersionMismatch:   SOAP Envelope 元素的无效命名空间被发现 
      MustUnderstand:    Header 元素的一个直接子元素(带有设置为 "1" 的 mustUnderstand 属性)无法被理解。 
      Client:            消息被不正确地构成,或包含了不正确的信息。 
      Server:            服务器有问题,因此无法处理进行下去。 

十一、SOAP HTTP Binding
    HTTP + XML = SOAP
    SOAP 请求可能是 HTTP POST 或 HTTP GET 请求。
    HTTP POST 请求规定至少两个 HTTP 头:Content-Type 和 Content-Length。

  1. SOAP请求
     POST /soapsamples/servlet/rpcrouter HTTP/1.0
     Host: localhost 
     Content-Type: 
     text/xml:charset=utf-8 
     Content-Length: 460 
     SOAPAction: ""  IBM  
      1) SOAP请求表明getQuote方法从以下地址调用:http://localhost/soapsamples/servlet/rpcrouter
      2) SOAP协议并没有指定如何处理请求,服务提供者可运行一个CGI脚本,调用servlet或执行其它产生对应响应的处理;
      3) 响应包含于一个XML文档格式的表单内,该表单包含了处理的结果,在我们这个范例中是IBM的股价; 
  2. SOAP响应
     HTTP/1.1 200 OK 
     Server: IBM HTTP SERVER/1.3.19 Apache/1.3.20 (Win32) 
     Content-Length: 479 
     Connection: close 
     Content-Type: text/xml; charset = utf-8 
     Content-Language: en  108.53  
     1) 结果所位于的元素名称在请求方法名后加后缀“Response”,
        例请求方法名为:getQuote, 响应方法名为:getQuoteResponse。 
  3. Http响应状态
     1) 1XX——information
     2) 2XX——success
     3) 3XX——redirection
     4) 4XX——client error
     5) 5XX——sever error 








part3. Web Service关键技术  ---  WSDL
-----------------------------------------------------
1. What is WSDL(Web Service Description Language) ——Web服务描述语言
   WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。
   一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应Web service的代码
     1) WSDL是以XML为基础的接口定义语言,它提供了一种分类和描述Web service的方式;
        描述Web服务 和说明如何与Web服务通信的XML语言
     2) WSDL定义了 Web service的接口,包括:
        a. 操作方式(单向、通知、请求-响应); 
        b. 定义了Web service的消息; 
        c. 数据类型(XML schema); 
           Web service访问协议(SOAP over HTTP); 
           Web service联系的终点(Web service URL); 
           符合要求的服务端应用程序必须支持这些接口,客户端用户能从这份文档中得知如何访问一个服务。 

2. WSDL文档结构
   <definitions>
       <types>    definition of types........    </types>
       <message>  definition of a message....    </message>
       <portType> definition of a port.......    </portType> //代表interface:接口
       <binding>  definition of a binding....    </binding>
       <service>  service of a binding....       </service>
   </definitions>

   总体上可以分为两大部分:
    1)抽象定义
      定义要交换的数据格式(数据类型/参数/返回值/方法声明) 
      types      定义数据类型,使用XML Schema作为类型系统
      messages   定义要交换的数据,数据类型是types中定义的数据类型。对应方法的参数
                 包括若干个part,每个part 都对应types中定义一个元素。对应方法的一个参数
      porttype(接口) 包含若干 operation;定义一个服务,对应Java的接口
                 包含一些operation,operation对应Java的方法
                 operation 都包含一个input 和 output 消息(messages中定义) 
    2)具体描述
      定义要采用的互操作协议(soap)、传输协议(http,ftp,smtp 等)、声明服务的访问地址    
      binding 针对 porttype 定义协议绑定和数据格式的细节:
              首先是定义消息风格(style) 和 传输协议(transport) 
              然后是对操作的输入输出的 消息编码方式(use) 
      service 包含若干 port
              port 定义了一个通信端点,代表 binding(不同协议)到 address 的映射

使用XFire开发Web Service
    XFire是一个开源的Web Service框架
    
    operation的四种类型:
        单向: 端点接收请求消息
        请求/应答: 端点接收请求消息,然后返回一个响应消息
        通知: 断点发送一个消息 
        要求/响应: 端点发送请求消息,然后接收一个响应消息

    SOAP的两种消息风格
        style=[document|rpc]
        document: 客户端使用 XML 模式调用约定。优点:更松散的客户端和服务器端耦合性,跨平台互操作性更好
           分两种: bared(裸露);  wrapped,模拟rpc(包装的) 
        rpc:      客户端使用远程过程调用约定。  优点:对开发人员更加简单. 

    binding的传输协议
        transport="http://schemas.xmlsoap.org/soap/http" 
        transport="http://schemas.xmlsoap.org/soap/smtp"
    binding中消息的编码方式
        user=[literal|encoded]
        literal: 使用types定义的数据类型
        encoded: 使用soap定义好的数据类型,不能使用自定义数据类型

    可能的style/user组合
        1. style="rpc" and use="encoded"
        2. style="rpc" and use="literal"
        3. style="document" and use="encoded"
        4. style="document" and use="literal"
        其中WS-I组织只支持(user=literal)格式;(user=encoded不被支持) 
        WS-I(Web Services Interoperability Organization) Web服务协同组织
        尽量使用第4种: style="document" and use="literal"









    
part4. Web Service关键技术  ---  UDDI
-----------------------------------------------------
一、 What is UDDI (Universal Description Discovery and Integration) 
     1) 即统一描述、发现和集成协议。
     2) UDDI提供了一种发布和查找Web服务的方式,使贸易伙伴彼此发现对方和查询对方。
     3) UDDI提供了一个全球的、平台无关的、开放式框架,使得商业应用能: 
        相互查找;
        定义它们通过Web交互的方式; 
        在一个全球注册场所共享信息;
     4) 在Web上存在三种开放的UDDI注册场所, 由IBM、Microsoft 和HP发起;
     5) 注册是免费的,在任一注册处注册的内容被其它注册处所复制;
     6) 在UDDI商业注册处提供的信息由三部分组成: 
        “白皮书”:(白页 White pages)包括地址、联系以及标识符、产品信息;
        “黄皮书”:(黄页 Yellow pages)包括基于标准分类学的各产业分类;
        “绿皮书”:(绿页 Green pages)所提供的service的详细信息;
     7) Web service provider 和 requester 使用SOAP API和UDDI注册处交流; 

预想的结构:发布者--注册服务--使用者
   不是必须的,公共的注册服务目前还没有被广泛接受

UDDI的数据结构
   1. businessEntity. 白页信息,公司的信息
  2. businessService.黄页信息,Web服务的分类信息
  3. bindingTemplate. 绿页信息,Web服务的技术信息,包括如何调用Web服务的信息
  4. tModels. 调用细节信息,包含WSDL文档的引用。











XFire动态客户端
-----------------------------------------------------
    第一步:引入 XFire相关的类库
        Core Libraries
        JAXB Libraries 
        HTTP Client Libraries 

    第二步:
        Client client = new Client(new URL("WSDL文档URL"));            //创建一个动态客户端
        Object[] results = client.invoke("test", new Object[] { "Juliet" });    //调用方法
        System.out.println( results[0]);

XFire动态客户端2
		Service srvcModel = new ObjectServiceFactory().create(MathService.class);
		XFireProxyFactory factory = new XFireProxyFactory(XFireFactory.newInstance().getXFire());

		// HelloWorld 服务名称
		String helloWorldURL = "http://localhost:8081/Hello/services/HelloWorld";
		IHelloWorld srvc = (IHelloWorld) factory.create(srvcModel, helloWorldURL);
		System.out.println("结果 :" + srvc.example("tarena"));











⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -