3.5 SOAP消息解剖
SOAP规范描述了四个主要的构件.使用信封形式的封装数据和路由路径的格式化规范,传输或是绑定协议,编码规则,RPC调用机制 . 信封定义一个为描述消息内容的规范,这个消息有一种轮流排队处理的含义.协议绑定能够使用低级别的HTTP协议传递SOAP消息提供一个一般的机制.编码规则提够一种规范为了映射各种各样应用数据到基于标签表现的TAG。最后 RPC机制提够了一种表示远程调用和他们返回值的方法。 众览这本。我们将涉及到这四个共有方面作为一种SOAP消息.
3.5.1 如何将XML转变成SOAP
我们通过关注文档交换模型来开始这个讨论.为了讲清楚这个话题,我们使用简单的购置订单文档.po.xml . 这个文档是简单的,因为他包括两件事,一件是运送地址,一件是明细实体。
<?xml version=”1.0” encoding=”UTF-8”?>
<PurchaseOrder xmlns =”urn:oreilly-yaws-samples”>
<shipTo country=”US”>
<name>jeo simth</name>
<street>14 oak park</street>
<city>bedford</city>
<state>MA</state>
<zip>01730</zip>
<shipTo>
<items>
<item partNum =”872-AA”>
<productName>candy cense</productName>
<quantity>444</quantity>
<price>1.68</price>
<comment>I want candy!</comment>
</item>
</items>
</purchanseOrder>
PO.XML 还不是一个SOAP文档,他仅仅是一个香草的XML文档。怎么样才能是他编程一个SOAP文档
l 在SOAP体的内部包装XML
l 在一个信封里面包装SOAP体
l 有选择的包含SOAP头
l 命名空间声明
l 为了数据序列化的编码风格。
l 绑定整个件事情到协议
一个SOAPenvelope 包括两个私有组件,一个是header,一个是body 在header和body可以包含很多信息块。
下面的列出的被envelope包裹的po.xml 使他成为一个soap。
<?xml version=’1.0’ encoding=’UTF-8’?>
<SOAP-ENV: Envelope
xmlns : SOAP-ENV=http://schema.xmlsoap.org/soap/envelope
xmlns :xsi =http://www.w3.org/1999/XMLschema-instance
xmlns : xsd=http://www.w3.org/19999/XMlSchema>
<SOAP-ENV :Header>
…………………..
</SOAP-ENV:Header>
<SOAP-ENV:BODY>
<?xml version=”1.0” encoding=”UTF-8”?>
<PurchaseOrder xmlns =”urn:oreilly-yaws-samples”>
<shipTo country=”US”>
<name>jeo simth</name>
<street>14 oak park</street>
<city>bedford</city>
<state>MA</state>
<zip>01730</zip>
<shipTo>
<items>
<item partNum =”872-AA”>
<productName>candy cense</productName>
<quantity>444</quantity>
<price>1.68</price>
<comment>I want candy!</comment>
</item>
</items>
</purchanseOrder>
</SOAP-ENV:BODY>
</SOAP-ENV: Envelope>
3.5.2 THE SOAP ENVELOPE
SOAP envelope 是勾画出SOAP文档的最远X,ML标签.下面的信封标签展示了三个必须的属性,即指定的命名空间,和为envelope使用的schema
<SOAP-ENV: Envelope
xmlns : SOAP-ENV=http://schema.xmlsoap.org/soap/envelope
xmlns :xsi =http://www.w3.org/1999/XMLschema-instance
xmlns : xsd=http://www.w3.org/19999/XMlSchema>
下面解释这个标签的语法。 第一个属性xmlns : SOAP-ENV=http://schema.xmlsoap.org/soap/envelope 是一个命名空间的声明。命名空间的声明阻止标签名字的冲突,当 XML碎被组成一个混合的文档的时候,,我和他JAVA里面使用包关键字是想同的.
首先,你可能看到<SOAP-ENV: Envelope xmlns : SOAP-ENV 除非了是一个特定的关键字之外就没什么了。事实上 初了使用 SOAP-ENV ,Envelope 和xmlns 完全就是主观的.在关键字中,Envelope 和xmlns,是重要的. URL http://schema.xmlsoap.org/soap/envelope 是一个被SOAP定义的保留的名字空间的URI。在我们的生活中是唯一的字符串.通用的习惯就是使用URI代替住址或是个人拥有的URL。这样的规范确保URI是一个全球唯一,他看起来是这样的:
<abbr: Envelope
xmlns : abbr=http://schema.xmlsoap.org/soap/envelope
xmlns :xsi =http://www.w3.org/1999/XMLschema-instance
xmlns : xsd=http://www.w3.org/19999/XMlSchema>
……….
</ abbr: Envelope >
在这个版本中的信封元素xmlns:abbr 声明了一个缩写的元素用来代替http://schema.xmlsoap.org/soap/envelope/.标签<abbr: Envelope ......和</ abbr: Envelope >暗示出这个命名空间的范围是整个信封.
紧接着 xmlns :xsi =http://www.w3.org/1999/XMLschema-instance 属性 声明了XML模式的实例空间.前缀XSI必须被放到所有被在命名空间元素和属性的前面. 对于一个属性的例子是xsi:type 它指定元素的类型是为了编码目的.
最后xmlns : xsd=http://www.w3.org/19999/XMlSchema 是另一个命名空间的声明 和xsi 和SOAP-EVN 相似。这个声明定义了XML模式的命名空间。来自己命名空间的元素被当作一个xsi:type属性的值。例如,xsd:string 或 xsd:boolean..对于SOAP文档的模式不会指向SOAP 信封.
3.5..3 SOAP 头
Soap 头和体在语法上面是相似的。SOAP1.1 和SOAP1.2 没规范说在头中需要什么。SOAP 头是一个简单的放指令到接收消息的SOAP处理器的地方。发送和接收消息的地方要就元素到什么地方和代表什么意思达成一致。建立在SOAP之上的比较高级的协议,比如EBXML MESSAGE SERVICE (MS)已经规则话的使用被定义特定元素的诸如<MessageHeader>SOAP 头.在<MessageHeader>包含指定的标签<from>,<to>,<MessageId> SOAP体被希望真实的数据 或是消息净负荷 希望被最后的接收者消费和处理
当使用SOAP 进行远程调用的时候,头和体的区别是简单的。<body.> 被纯作为方法和参数的调用,头是被作为事情最基础的部分 ,比如一个事物ID。事物ID不能被属于一个方法的签名 ,他被打算为SOAP处理器接收消息,这个消息为J2EE服务提供事务处理。
这里有一个SOAP头的事例:
<SOAP-ENV: Envelope
xmlns : SOAP-ENV=http://schema.xmlsoap.org/soap/envelope
xmlns :xsi =http://www.w3.org/1999/XMLschema-instance
xmlns : xsd=http://www.w3.org/19999/XMlSchema>
<SOAP-ENV:Header>
<jaws:MessageHeader xmlns:java=”urn:oreilly-jaws-sample”>
<From>Me</From>
<To>You</To>
<MessageId>9999</MessageId>
</jaw:MessageHeader>
</SOAP-ENV:Header>
<SOAP-EVN:Body>
……………………..
<SOAP-EVN:Body>
</SOAP-ENV: Envelope>
3.5.4 SOAP协议绑定
在这点上,我们仅仅需要增加一件事情,使PO.XML进到SOAP消息里面去:soap消息需要被协议绑定。 当他被绑定到HTTP协议上的时候,下面的列表显示了HTTP头信息 :
SOAPAction =”urn : soaphttpclient-action-uri”
Host = localhost
Content-Type=text/xml;charset=utf-8
Content-Length=701
<?xml version=’1.0’ encoding=’UTF-8’?>
<SOAP-ENV : Envelope
Xmlns : SOAP-ENV =http://schemas..xmlsoap.org/soap/envelop/
Xmlns : xsi= http://www.w3.org.1999/XMLSchema-instance
Xmlns: xsi =www.w3.org/1999/XMLSchema>
……………………..
</SOAP-EVN:Envelope>
SOAPAction 头稍微有一点改变.在SOAP1.1中,他是HTTP协议的绑定的需要.他的意图是允许路由或是调度这类事情不需要SOAP知识或是不需要解析SOAP信封就能做的很好。比较,一些CGI脚本或是以路由请求为目的的SERVLET 不必处理SOAP信封就能拿到路由信息,这个概念是伟大的,但是他要绑定HTTP协议。
在soap1.2 SOAPAction 已经被优化了..他不取决把扩展强加到一个基础的协议.在这种情况下,对于诸如Action的HTTP请求头的存在,或是创造一个叫做SOAPAction 的东西就不能归咎于任何人。我们确实需要一种生成机制为了独立于协议的指定的带数据。如果如此的一件事情存在,人们只为创建一个标准的到HTTP隐射负责,这个HTTP可能也已经包含有一个SOAPAction 头。但是,对于映射的第一种语义不应该指定射影余下的 部分应该咋样做。
分享到:
相关推荐
在Java中,通常使用JAX-WS(Java API for XML Web Services)来处理SOAP消息,它提供了一种标准的方式来创建和消费Web服务。 4. **SOAP服务实现**:在Java中,可以通过实现一个接口或者继承特定的类来创建SOAP服务...
- **3.5 使用SOAP构建RPC风格的Web服务** - 通过使用SOAP可以构建远程过程调用(RPC)风格的服务,这种方式简化了客户端与服务器之间的交互过程。 - **3.6 SOAP的数据编码** - SOAP支持多种数据编码方式,例如XML...
Java Web Service 学习例子,里面有大量用来开发web services的Java程序示例,非常值得学习。 使用到的技术及工具如下: Apache: www.apache.org and xml.apache.org -- Ant 1.4.1 -- SOAP 2.2 -- Tomcat 3.2...
ASP.NET 中使用 C# 调用 Java Web Service 图解教程 在本教程中,我们将学习如何在 ASP.NET 中使用 C# 调用 Java Web Service。首先,我们需要了解什么是 Web Service。 Web Service 是一种软件系统,旨在支持机器...
Java Web Service 总结 Java Web Service 是一种基于 XML 的分布式系统架构,它使得不同的系统和应用程序可以通过标准的协议和数据格式进行通信和交互。下面是 Java Web Service 的总结,涵盖了 Web Service 的原理...
对于Java Web Service来说,这涉及到监控服务接口、通信性能数据(如SOAP消息大小、通信时间及解析时间)、请求事件(如接收请求、创建/解析SOAP消息的开始和结束)等。 JMX(Java Management Extensions)基础设施...
标题"D6 SOAP_WEB SERVICE"指的是使用Delphi编程语言开发基于SOAP(简单对象访问协议)的Web服务。在本文中,我们将深入探讨这个主题,了解如何使用Delphi构建Web服务以及SOAP在其中的作用。 首先,让我们了解一下...
当涉及到Web Service客户端与服务器之间的交互时,有时需要在SOAP消息中添加额外的信息,例如身份验证或安全凭证,这就是SOAP Header的作用。SOAP Header是SOAP Envelope的一部分,它允许扩展和自定义消息处理。 在...
【标题】基于Servlet发送、接收SOAP消息的Java源程序 在Web服务开发中,SOAP(简单对象访问协议)是一种常见的消息传输协议,用于在不同系统间交换结构化和类型化的信息。Servlet作为Java Web应用程序的核心组件,...
Java Web服务客户端是Java开发人员用来与Web服务交互的重要工具,尤其在基于SOAP(Simple Object Access Protocol)协议的通信中。本压缩包“java-ws-clients.rar”包含了一些关于如何使用Java和Apache Axis库创建及...
Java调用Java Web Service是Java开发中的一个常见任务,它涉及到Web服务的消费与交互,主要基于SOAP(Simple Object Access Protocol)协议。本篇将详细阐述这个过程,并结合标签“源码”和“工具”,探讨如何通过源...
### Java Web Service 教程详解 #### 一、引言 在现代软件开发领域中,Web服务技术扮演着至关重要的角色。它不仅为不同应用程序之间的交互提供了标准的方式,还极大地促进了分布式系统的构建和发展。本教程旨在...
在《实战Delphi6/Kylix2/SOAP/Web Service程序设计篇》这本书中,作者李维精心编撰了一套系统而全面的教程,针对的是Delphi6和Kylix2这两个经典的Visual Basic derivative (VBD) 编程环境,尤其是针对SOAP(Simple ...
【Java Web Service客户端实现详解】 Java Web Service是一种基于标准的、平台无关的、用于构建分布式应用程序的技术,它允许服务提供者和服务消费者通过网络进行通信。客户端实现Java Web Service主要包括三种方式...
《XFire Java Web Service 客户端详解》 在当今的软件开发中,Web服务已经成为分布式系统间交互的重要手段。XFire,作为一个历史悠久的Java Web Service框架,为开发者提供了便捷的方式来创建、部署和消费Web服务。...
Java Web Service利用开放标准如SOAP(Simple Object Access Protocol)和WSDL(Web Services Description Language)来实现这一点。在本教程中,我们将深入探讨这个主题,涵盖从基础到高级的各个方面。 首先,我们...
第一章 SOAP和Web Service的概念 第二章 组件模型、Internet/Intranet和SOAP 第三章 开发Web Service 第四章 什么是SOAP 第五章 SOAP和数据封装 第六章 SOAP和远程调用 第七章 Web Service和UDDI 第八章 处理复杂...
本篇文章将详细讲解与"WEB SERVICE"和"SOAP"相关的知识点,以及如何利用JAR包来支持这些服务。 首先,让我们理解什么是Web服务。Web服务是通过HTTP协议提供的一种接口,使得应用程序能够跨平台地交换数据。它们通过...
详细讲解web service soap原理。